文章參考自
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
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"
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 字段有默認值
