2009-09-21 121 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是特定值。