在linux下网管安装的mysql不知何故其sql-mode设置为'',这样导致在插入数据的时候,如果数据长度大于字段的长度则多余的部分会被自动截断。
下面表格说明了char和varchar之间的区别:
值 |
CHAR(4) |
存储需求 |
VARCHAR(4) |
存储需求 |
'' |
' ' |
4个字节 |
'' |
1个字节 |
'ab' |
'ab ' |
4个字节 |
'ab ' |
3个字节 |
'abcd' |
'abcd' |
4个字节 |
'abcd' |
5个字节 |
'abcdefgh' |
'abcd' |
4个字节 |
'abcd' |
5个字节 |
一般情况下sql-mode应该设置为STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION