2011-03-01 81 views
1

在開發我的電路板軟件時,我被告知MySQL 5.1.36有關文本字段和默認值的問題。註冊新用戶時會發生這種情況,這是安裝後完成的第一件事。MySQL文本字段默認值和版本差異

用戶表除了各種其他內容之外還有一個定義爲「TEXT NOT NULL」的簽名字段。註冊時,INSERT查詢字段列表中未指定此字段。在運行MySQL 5.1.30的本地測試/開發服務器上,這很好。在我運行MySQL 5.0.91的活服務器上,這也可以。但是這個測試人員向我詢問,並且說它在他的運行5.1.36的測試服務器上不起作用,錯誤消息指出查詢必須指定一個默認值。

這裏有很多TEXT字段在播放。我原來的計劃是檢測MySQL 5.1.36,並讓安裝程序拒絕運行,但前提是該行爲對於5.1.36是唯一的。 .37或更高版本是否也一樣?我錯過了什麼嗎?

+0

那豈不是更容易只是設置默認字段值到''''(空字符串)?那麼你不必擔心MySQL版本。 – dnagirl 2011-03-01 17:58:21

+0

因爲有很多文本字段,就像我說的。 – Kawa 2011-03-01 17:59:09

+0

但您只設置一次表格定義,所以儘量避免將字段默認設置爲假經濟,即使多個表格中有很多文本字段。另一種可能性,而不是檢測MySQL版本,只是爲每個文本字段使用空字符串編寫插入查詢。但那*是更多的工作。 – dnagirl 2011-03-01 18:05:46

回答

2

難道你不能只是改變所有的文本列,以允許NULL? Mysql不允許您爲文本/ blob列指定DEFAULT

+0

這對我的作品dev服務器。要求另一個人嘗試... – Kawa 2011-03-01 18:39:24

7

此行爲是獨有5.1.36,事實上,我認爲這是不成熟的假設MySQL版本是有關這個問題的。

我建議您檢查正在使用的SQL_MODE:

select @@SQL_MODE; 

如果SQL_MODE是空的,那麼我希望插入到你列出的版本(含警告)取得成功。

如果SQL_MODE更爲嚴格,如TRADITIONALSTRICT_ALL_TABLES,那麼我希望插入到所有你的錯誤中列出的版本的失敗:ERROR 1364 (HY000): Field 'your_field' doesn't have a default value

可能的修正:

1)更改列以明確允許NULL值:

ALTER TABLE your_table MODIFY COLUMN your_column TEXT NULL; 

2)強制將SQL_MODE設置爲''。要做到這一點,最好的辦法是將其設置在my.cnf和重啓MySQL,但你也可以在MySQL提示符測試設置:

SET SESSION SQL_MODE = ''; 
+1

你是一個走在男人之間的神。感謝你的這一點,經過了一天的努力,它救了我。 :D +1 – 2013-07-16 09:48:08