首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql如何使用UTF8字符集作为varchar(21884)添加列?

问Mysql如何使用UTF8字符集作为varchar(21884)添加列?
EN

Stack Overflow用户
提问于 2018-12-12 07:17:27
回答 1查看 217关注 0票数 0

如果我执行此查询:

代码语言:javascript
复制
CREATE TABLE `varchar_test1` (
  `id`  tinyint(1)  NOT NULL,
   `cloumn_1` varchar(21844) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;

没事的。

如果我执行以下操作:

代码语言:javascript
复制
ALTER TABLE `varchar_test1` ADD COLUMN `cloumn_2` varchar(21844) NOT NULL;

我收到一个错误:

错误1118 (42000):行大小太大。使用的表类型的最大行大小(不包括BLOB)为65535。这包括存储开销,检查手册。必须将某些列更改为文本或BLOB。

如果我执行这个:

代码语言:javascript
复制
CREATE TABLE `varchar_test2` (
`id` int NOT NULL AUTO_INCREMENT,
`cloumn_1` varchar(21844) NOT NULL,
PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

我得到:

错误1118 (42000):行大小太大。使用的表类型的最大行大小(不包括BLOB)为65535。这包括存储开销,检查手册。必须将某些列更改为文本或BLOB。

为什么?

运行mysql --version返回

mysql 14.14远端5.7.17,用于macos10.12 (x86_64),使用EditLine包装器

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-12 07:27:05

您的问题是,您的列存储多字节值,因此超过了最大行大小。

正如在文档中解释的那样,MySQL表的最大行大小为65,535字节,而不管您使用的引擎是什么。添加两个varchar(21844)列意味着超出了这个限制。这是因为表上的CHARSET是utf8 (当前是utf8mb3的别名),所以是在表中,最多需要3个字节。 (加上存储长度的2个字节)。对于21,844个字符的一列来说,这是可以接受的,但对于两个字符则不是这样。

要解决这个问题,请使用TEXT (或TINYTEXT、MEDIUMTEXT等)而不是VARCHAR列。这将导致将值单独存储,因此您的每个列实际上只为行大小贡献了几个字节。(这在文档中也有解释。)

另外,FYI:拼写是column,而不是cloumn。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53737851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档