MySQL varchar(255)到底能存储几个中文字符

前言

前端截图显示接口报错为:ERROR 1406 (22001): Data too long for column ‘desc’ at row 1,翻译过来得出表字段设置的长度不够。我设置的字段类型为 varchar

记录

Value CHAR(4) Storage Required VARCHAR(4) Storage Required
‘ ’ ‘    ’ 4 bytes ‘ ’ 1byte
‘ab’ ‘ab’ 4 bytes ‘ab’ 3 bytes
‘abcd’ ‘abcd’ 4 bytes ‘abcd’ 5 bytes
‘abcdefgh’ ‘abcd’ 4 bytes ‘abcd’ 5 bytes
上表来自 MySQL 文档

char (n): 固定长度字符串,n 表示要存储的最大字符数,范围( 0 ~ 255 )
varchar (n):可变长度字符串,长度可以指定为0到65535之间的值(实际上由于字符数大于255后保存字符长度需要2个字节,所以长度最大可为65533字节)。 VARCHAR的有效最大长度取决于最大行大小(65535字节,在所有列之间共享)和所使用的字符集。

MySql 5.0 以上的版本:

  1. 一个汉字占多少长度与编码有关:
  • UTF-8:一个汉字 = 3个字节,英文是一个字节
  • GBK: 一个汉字 = 2个字节,英文是一个字节
  • utf8mb4: 一个汉字 = 4个字节,英文是一个字节
  1. varchar(n) 表示n个字符,无论汉字和英文,MySql都能存入 n 个字符,仅实际字节长度有所区别。
  2. MySQL检查长度,可用 SQL 语句 SELECT LENGTH(fieldname) FROM tablename

结论

utf-8 字符集中,最多可以存储(65535 -2) / 3 = 21844 个汉字
gbk 字符集中,最多可以存储(65535 - 2) / 2 = 32766 个汉字

但是,并不是说能够存储这么多就必须存储这么多的字符,考虑到各种原因,建议长度不要超过 255 个字符。需要存储大文本数据,可以使用 text 为字段类型。

参考:

MySQL-没有必要的varchar(255)长度及存储汉字问题汇总
分享 MySQL 数据库 varchar 到底可以存多少个汉字,多少个英文呢?我们来搞搞清楚


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!