一尘不染

MySQL VARCHAR长度和UTF-8

mysql

在MySQL中,如果我VARCHAR(32)在UTF-8表中创建一个新字段,是否意味着我可以在该字段中存储32个字节的数据或32个字符(多字节)?


阅读 323

收藏
2020-05-17

共1个答案

一尘不染

这个答案出现在我的Google搜索结果的顶部,但不正确,所以:

混乱可能是由于测试了不同版本的mysql。

  • 版本4计数字节
  • 版本5包含字符

http://dev.mysql.com/doc/refman/5.0/zh-CN/string-type-
overview.html

MySQL以字符单位解释字符列定义中的长度规范。(在MySQL
4.1之前,列的长度以字节为单位进行解释。)这适用于CHAR,VARCHAR和TEXT类型。

有趣的是(我没想过)varchar列的最大长度受utf8的影响如下:

在MySQL
5.0.3及更高版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,在所有列之间共享)和所使用的字符集。例如,utf8字符每个字符最多需要三个字节,因此使用utf8字符集的VARCHAR列可以声明为最多21,844个字符。

2020-05-17