MySQL中varchar字段长度到底是多少?请注意其他字段的影响,因为一行最大长度65535。

版权声明:允许转载,请注明来源。 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。

于是,重新计算一下长度,减去其他字段的长度,可以成功保存了。

猜你喜欢

转载自blog.csdn.net/weixin_42127613/article/details/82459579