2009-09-21 125 views
2

在MySQL中,整数字段的默认值为0.在插入过程中,该字段的值为NULL,并插入NULL。我做一些算术操作,如加法,乘法,除法使用该字段的值。当插入NULL时会导致错误。如何解决这个问题?如果数据库的插入值为空,则数据库不支持像integer,decimal这样的字段的默认值(可能不适用于字符串类型,因为NULL对字符串有效)。如果不是,那么为数值类型设置NULL值是否正确?MySQL默认值问题

出于某种原因,当我有一个小数字段NOT NULL和缺省值0,插入失败,错误消息“数据被截断为在第1行的列‘COLUMN_NAME’”。

如果我删除了NOT NULL属性,则插入将成功执行与警告相同的消息。

是被插入到小数字段的值为AVG()的MySQL函数

真的懵懵懂懂的结果...

可能是什么原因?

回答

4

NULL是任何mysql列/类型的正确值。

您可以设置列NOT NULL,或者你需要解决它在你的脚本语言,所以,空没有得到插入。

+0

当我设置NOT NULL属性,插入过程中抛出了“数据被截断在ROW1的栏位名”出错,且行越来越插入 – 2009-09-21 09:08:48

+0

权,为NULL是不允许的,MySQL将截断插入的行。你需要在你的脚本中解决这个问题或者配置mysql来允许这个(虽然我不确定在mysql配置中是否有这样的选项) – dusoft 2009-09-21 13:30:07

+1

带有NOT NULL和默认值的字段不应该抛出错误,因为我已经设置了如果NOT NULL失败,则为默认值。它应该尝试插入默认值吗? – 2009-09-22 05:45:26

2

您可以设置一个字段作为NOT NULL完全避免这个问题。如果NULL值不需要,那就是你应该做的。当列为NOT NULL时,将插入类型的默认值(整数为0),而不是NULL

+0

当我设置NOT NULL属性时,在插入期间抛出“数据被截断为列1在row1”错误,并且没有行被插入 – 2009-09-21 09:12:38

3

创建表时必须将默认值'0'指定给表结构。或者你可以改变它使用:

ALTER TABLE `TableName` CHANGE `FieldName `FieldName` INT(11) NULL DEFAULT '0'

希望这会有所帮助。

+0

您的语句中有额外的单引号,否则为+1。 – Piskvor 2009-09-21 08:57:49

+1

但仍然有默认值没有解决这个问题..! – 2009-09-21 08:59:25

+0

你的意思是,已经存在的价值?如果你,你可以使用Update来更改全部,如下所示:“UPDATE'TableName' SET'FieldName' ='0'Where'FieldName' IS NULL”。 – NawaMan 2009-09-21 09:32:35

1

如果有计算你在做什么,改变列定义没有问题,NOT NULL DEFAULT 0,那么你将永远有正确的整数(或十进制)。但是您需要记住将旧值从零更改为0.

3

要插入默认值,您必须不为列指定任何值,甚至不指定NULL,因为NULL是特定值。