好运物流网-全国领先的物流网   好运物流网-登录  好运物流网-免费注册 进入我的后台 首页 | 发布信息 | 服务项目 | 物流百科
物流查询|物流公司|中国物流信息网-好运物流网
 
你正在查看的信息:资讯首页->资讯频道->IT编程技术->正文

mysql增加字段时报错:Row size too large,mysql的行、字段长度的限制

更新时间:2022/4/23 14:03    出处:互联网
已经浏览
1364
root@localhost : test 10:30:54>CREATE TABLE tb_test (
    -> recordid varchar(32) NOT NULL,
    -> areaShow varchar(10000) DEFAULT NULL,
    -> areaShow1 varchar(10000) DEFAULT NULL,
    -> areaShow2 varchar(10000) DEFAULT NULL,
    -> PRIMARY KEY (recordid)
    -> ) ENGINE=INNODB DEFAULT CHARSET=utf8;
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
报错
root@localhost : test 10:31:01>CREATE TABLE tb_test (
    -> recordid varchar(32) NOT NULL,
    -> areaShow varchar(30000) DEFAULT NULL,
    -> areaShow1 varchar(30000) DEFAULT NULL,
    -> areaShow2 varchar(30000) DEFAULT NULL,
    -> PRIMARY KEY (recordid)
    -> ) ENGINE=INNODB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 3 warnings (0.26 sec)
可以建立,只是类型被转换了。
root@localhost : test 10:31:14>show warnings;
+-------+------+----------------------------------------------------+
| Level | Code | Message                                            |
+-------+------+----------------------------------------------------+
| Note  | 1246 | Converting column 'areaShow' from VARCHAR to TEXT  |
| Note  | 1246 | Converting column 'areaShow1' from VARCHAR to TEXT |
| Note  | 1246 | Converting column 'areaShow2' from VARCHAR to TEXT |
+-------+------+----------------------------------------------------+
3 rows in set (0.00 sec)

疑问:

为什么字段小(10000)的反而报错,而大(30000)的则可以建立。为什么小的不能直接转换呢?

解决:

这里多感谢orczhou的帮助,原来MySQL在建表的时候有个限制:MySQL要求一个行的定义长度不能超过65535。具体的原因可以看:

http://dev.mysql.com/doc/refman/5.1/en/silent-column-changes.html

(1)单个字段如果大于65535,则转换为TEXT 。

(2)单行最大限制为65535,这里不包括TEXT、BLOB。

按照上面总结的限制,来解释出现的现象:

第一个情况是:
单个字段长度:varchar(10000) ,字节数:10000*3(utf8)+(1 or 2) = 30000 ,小于65535,可以建立。
单行记录长度:varchar(10000)*3,字节数:30000*3(utf8)+(1 or 2) = 90000,大于65535,不能建立,所以报错:

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
第二个情况是:
单个字段长度:varchar(30000) ,字节数:30000*3+(1 or 2) = 90000 , 大于65535,需要转换成TEXT,才可以建立。所以报warnings。
单行记录长度:varchar(30000)*3,因为每个字段都被转换成了TEXT,而TEXT没有限制,所以可以建立表。

root@localhost : test 10:31:14>show warnings;
+-------+------+----------------------------------------------------+
| Level | Code | Message                                            |
+-------+------+----------------------------------------------------+
| Note  | 1246 | Converting column 'areaShow' from VARCHAR to TEXT  |
| Note  | 1246 | Converting column 'areaShow1' from VARCHAR to TEXT |
| Note  | 1246 | Converting column 'areaShow2' from VARCHAR to TEXT |
+-------+------+----------------------------------------------------+
还可以看看其他文章,谢谢您的阅读。
网站申明:系本文编辑转载,来源于网络,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,所有权归属原作者。如内容、图片有任何版权问题,请联系我们删除
上一篇:mysql一张表最多可以创建多少字段,单表最大列数限制 下一篇:MySQL中varchar最大长度是多少?行长度限制:MySQL行的定义长度不能超过65535
更多相关的物流文章
IT编程技术  互联网  2023-10-07  浏览:6377次
IT编程技术  互联网  2022-11-24  浏览:9594次
IT编程技术  互联网  2022-11-17  浏览:10013次
IT编程技术  互联网  2022-11-17  浏览:9614次
IT编程技术  互联网  2022-11-14  浏览:9431次
IT编程技术  互联网  2022-11-06  浏览:9771次
IT编程技术  互联网  2022-11-05  浏览:9312次
IT编程技术  互联网  2022-10-28  浏览:10045次
正在被浏览的文章
【IT编程技术】热点文章
“扫一扫”微信公众号
好运物流网公众号二维码
关于好运物流网 - 联系好运网 - 物流公司查询 - 物流知道 - 帮助中心 - 网站地图
温馨提示:防范支招 安全警示:货运合作要有安全意识,需当面核实对方真实身份,要签订合同/协议、提供身份证等(防范支招)
免责声明:本站只起到物流信息平台作用,内容的准确性以及物流过程中出现的任何风险均由发布者负责,与平台无关。
好运物流网(haoyun56.com)  备案号:浙ICP备10210792号-4

浙公网安备 33080202000006号