文章參考自

window系統參考:http://blog.sina.com.cn/s/blog_46f7bb6d0102vde3.html

linux 參考:http://www.linuxeye.com/database/2909.html

背景

公司的資料庫規範是,每個欄位必須not null 且 必須有預設值

問題

設定為test型別後,欄位不能設定預設值

解決(不建議取消)

取消資料庫的嚴格模式

*********windows下**********

1、 找到mysql安裝根目錄下的my.ini檔案

2、 找到這樣一行:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

3、 在其前面加‘#’將其註釋掉:

#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

4、 重啟mysql服務

5、 重新執行你的mysql語句
*************linux下*************

方法一、

1)修改my.cnf1、設定啟動引數,將預設sql_mode改為寬鬆模式使用命令:

echo "sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" >> /etc/my.cnf
或手動修改:
vi /etc/my.cnf
找到sql-mode關鍵字,若沒有,在檔案尾新增一行
替換成:
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO
2)重啟mysql
service mysqld restart

方法二、修改啟動指令碼

1)設定啟動指令碼引數 使用命令:

sed -i "s#\"\$\*\"#--sql-mode=\"NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\"#" /etc/init.d/mysqld

或手動修改: vi /etc/init.d/mysqld 找到 other_args="$*"

改成 other_args="--sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

2)重啟mysql
service mysqld restart

原因

1、 MYSQL5.x是不允許BLOB/TEXT型別的欄位擁有預設值的。

2、 由於MYSQL是在‘strict mode’嚴格模式下工作的,如果改為非嚴格模式,即可

3、 MYSQL5.x在windows下是預設以‘strict mode’工作的,當執行上面的語句時,會給你一個錯誤或者警告資訊

但是嚴格模式為什麼不能設定預設值的真正原因還不知道

拓展

1、何為嚴格模式  http://koda.iteye.com/blog/288882

I. Strict Mode闡述 
根據 mysql5.0以上版本 strict mode (STRICT_TRANS_TABLES) 的限制: 
1).不支援對not null欄位插入null值 
2).不支援對自增長欄位插入''值,可插入null值 
3).不支援 text 欄位有預設值