问题描述:Data truncation: Data too long for column ‘sku_category’ at row 4
1 、Data truncation: Data too long for column 'sku_category' at row 4
insert 的时候,字段值太长了,超过数据库定义的varchar ( 256 )
解决:
alter table return_plan_order_detail modify column sku_category varchar ( 510 ) ;
在 5.1 版本后, varchar ( 100 ) 就是指 100 个字符。
MySQL中char , varchar 与text 类型的选用:
知道固定长度的用char , 比如MD5串固定是32 位.
经常变化的字段用varchar .
超过255 字符的只能用varchar 或者text , 不能用char .
能用varchar 的地方不用text .
而blob 和text 类型只占用9 到12 个字节,它们的内容分散到不同行上去了。
string一般存储短字符串,它的长度可以理解为字符长度,一般最好不要超过255 个。
如果长度大于255 最好考虑text 或者blob
2. varchar ( 20 ) 与varchar ( 255 ) 都是可变的字符串
通常情况下使用varchar ( 20 ) 和varchar ( 255 ) 保存较短的字符串’hello world’时, 占用的空间都是一样的,但使用长度较短的列却有巨大的优势。较大的列使用更多的内存,MySQL通常会分配固定大小的内存块来保存值,这对排序或使用基于内存的临时表尤其不好。同样, 也会发生在使用文件排序或者基于磁盘的临时表时。
( 当使用ROW_FORMAT= FIXED 创建MyISAM表时,会为每行使用固定的长度空间,这样设置不同的varchar 长度值时,存储相同数据所占用的空间是不一样)
3. 字符串较长
当20 < 字符长度< 255 , varchar ( 20 ) 会报错, varchar ( 255 ) 会正常插入.
4. 字符串特别长
字符长度> 255 , 可以选择更大的值, VARCHAR ( M) 定义的列长度为可变长字符串,M取值可以为0 ~ 65535 ( 64 K) 之间,( VARCHAR 的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65 , 532 字节)
Mysql 为什么默认定义varchar ( 255 ) 而不是varchar ( 256 )
当定义varchar 长度小于等于255 时,长度标识位需要一个字节;
当大于255 时,长度标识位需要两个字节
当我们定义一个varchar ( 255 ) 的字段时,其实它真实使用的空间是256 (255 + 1 )字节;(注意,字段非空,latin1编码)
当我们定义一个一个varchar ( 256 ) 字段时,它真实使用的空间是258 (256 + 2 )字节
https: