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

推荐答案

这个答案出现在我的谷歌搜索结果的顶部,但并不正确.

confusion可能是由于测试的MySQL版本不同.

  • 版本4计算字节数
  • 第5版统计字符数

以下是官方MySQL 5 documentation的引用:

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

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

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

Mysql相关问答推荐

AWS RDS上的MySQL复制错误:超级权限或REPLICATION_SLAVE_ADMIN权限的访问被拒绝

无条件理解MySQL中内连接和交叉连接的相似性

客户跨订阅的跨时间线计数

为分组记录MySQL取取值为TRUE的单行

如何防止程序中计数器出错

递归查询意外地为一个字段返回空值

从连接表中try 按唯一ID计算行数 MySQL

Travis 构建失败并出现错误 LOAD DATA LOCAL INFILE 文件请求因访问限制而被拒绝

使用 SELECT 时应锁定多少行 .. FOR UPDATE LIMIT 1

MySQL:根据条件查找某些用户的行位置

MYSQL除以零警告,奇怪的行为

处理 Visits 表中数百万行的最佳方法是什么?

计算每个用户在第二个表中有多少条记录

不是唯一的表/别名

授予用户对 MySQL 中有限数量表的访问权限

MAMP mysql 服务器无法启动.没有mysql进程正在运行

如何用一系列日期填充表格?

在 MYSQL 中按枚举字段排序

从 MySQL JSON 数据类型中提取不带引号的值

ON UPDATE RESTRICT 有什么作用?