2015-10-06

MySQL 5.6 varchar 超過最大長度 max-lenght/max-size 還被儲存問題

如果你發現你的 MySQL 好像容忍度大增,例如
* 明明是 unsigned int 的欄位你卻可以儲存負數(-1)
* 明明限制 varchar 長度為 10 但卻可以輸入 11 長字串儲存時自動截斷字串(auto truncate)
 "123456789012345" => "1234567890"  (auto truncated & saved)

這是因為
MySQL 有二個設定


STRICT_ALL_TABLES - Behave more like the SQL standard and produce errors when data is out of range.
STRICT_TRANS_TABLES - Behave more like the SQL standard and produce errors when data is out of range, but only on transactional storage engines like InnoDB.


MySQL 5.6 後預設把這兩個設定 disable 了
解法就是到你的 MySQL 加入


[mysqld]
......
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

.....


再重開 server 即可
#service mysql restart

沒有留言:

張貼留言