版权声明:允许转载,请注明来源。 https://blog.csdn.net/weixin_42127613/article/details/82459579
在使用MySQL进行数据库表设计时,遇到一个字符串字段,需要很大的长度。于是,字段类型用varchar,长度想当然的填上65535,结果报错。如下图所示。
上网查询,原来长度65535表示的是字节数,并不是字符数。
什么意思?因为汉字的原因。汉字需要考虑编码的问题。如果用GBK编码,一个汉字用2个字节;如果用utf-8编码,一个汉字用3个字节。
因此,如果该varchar字段的字符集用GBK,则最大长度为32766;如果字符集用UTF-8,则最大长度为21845。
由于我使用的是UTF-8编码,所以上面报错,告知最大长度只能是21845。
于是填上了21845,结果还是报错。如下图所示。
最后,找到原因,原来MySQL字段长度还有一个“行限制”。即一行的最大长度为65535,超过了就会报错。BLOB类型不包括在内。
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
于是,重新计算一下长度,减去其他字段的长度,可以成功保存了。