MySQL 错误 ERROR 1118 42000 Row size too large The maximu

news/2024/7/9 22:45:45
               

朋友发过来一个SQL,,让我执行以下:

CREATE TABLE `ttt``id` DOUBLE`select_type` VARCHAR (57), `table` VARCHAR (192), `type` VARCHAR (30), `possible_keys` VARCHAR (22288), `key` VARCHAR (192), `key_len` VARCHAR (22288), `ref` VARCHAR (3072), `rows` DOUBLE`Extra` VARCHAR (765)); INSERT INTO `ttt` (`id`, `select_type`, `table`, `type`, `possible_keys`, `key`, `key_len`, `ref`, `rows`, `Extra`) VALUES('1','PRIMARY','aaa','index',NULL,'email_2','51',NULL,'5','Using where; Using index');INSERT INTO `ttt` (`id`, `select_type`, `table`, `type`, `possible_keys`, `key`, `key_len`, `ref`, `rows`, `Extra`) VALUES('2','DEPENDENT SUBQUERY','bbb','ref','id','id','5','test.aaa.id','1','Using where; Using index');

执行第一句建表的时候就卡住了,报错如下:

mysql> CREATE TABLE `ttt` (    -> `id` DOUBLE ,    -> `select_type` VARCHAR (57),    -> `table` VARCHAR (192),    -> `type` VARCHAR (30),    -> `possible_keys` VARCHAR (12288),    -> `key` VARCHAR (192),    -> `key_len` VARCHAR (12288),    -> `ref` VARCHAR (3072),    -> `rows` DOUBLE ,    -> `Extra` VARCHAR (765)    -> ); ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBsmysql>

看了提示,表的2个varchar字段长度设置过长了,需要改成text,blob之类的类型,修改之后执行成功了:

mysql> use test;Database changedmysql> mysql> CREATE TABLE `ttt` (    -> `id` DOUBLE ,    -> `select_type` VARCHAR (57),    -> `table` VARCHAR (192),    -> `type` VARCHAR (30),    -> `possible_keys` TEXT,    -> `key` VARCHAR (192),    -> `key_len`  TEXT,    -> `ref` VARCHAR (3072),    -> `rows` DOUBLE ,    -> `Extra` VARCHAR (765)    -> ); Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO `ttt` (`id`, `select_type`, `table`, `type`, `possible_keys`, `key`, `key_len`, `ref`, `rows`, `Extra`) VALUES('1','PRIMARY','aaa','index',NULL,'email_2','51',NULL,'5','Using where; Using index');Query OK, 1 row affected (0.04 sec)mysql> INSERT INTO `ttt` (`id`, `select_type`, `table`, `type`, `possible_keys`, `key`, `key_len`, `ref`, `rows`, `Extra`) VALUES('2','DEPENDENT SUBQUERY','bbb','ref','id','id','5','test.aaa.id','1','Using where; Using index');Query OK, 1 row affected (0.00 sec)mysql> select * from ttt;+------+--------------------+-------+-------+---------------+---------+---------+-------------+------+--------------------------+| id   | select_type        | table | type  | possible_keys | key     | key_len | ref         | rows | Extra                    |+------+--------------------+-------+-------+---------------+---------+---------+-------------+------+--------------------------+|    1 | PRIMARY            | aaa   | index | NULL          | email_2 | 51      | NULL        |    5 | Using where; Using index ||    2 | DEPENDENT SUBQUERY | bbb   | ref   | id            | id      | 5       | test.aaa.id |    1 | Using where; Using index |+------+--------------------+-------+-------+---------------+---------+---------+-------------+------+--------------------------+2 rows in set (0.00 sec)

疑惑:varchar(N),这个N不是最大为65535吗?为什么设置成12288就会报错?12288比65535小很多啊。

有问题上官网:http://dev.mysql.com/doc/refman/5.6/en/char.html

In contrast to CHARVARCHAR values are stored as a 1-byte or 2-byte length prefix plus data. The length prefix indicates the number of bytes in the value. A column uses one length byte if values require no more than 255 bytes, two length bytes if values may require more than 255 bytes.

原来有N有255这样一个坎啊,超过了N的意义就不一样了。 


后续测试1 ,朋友木木说是字符集的问题,那么我就执行之前设置下字符集,不过还是报错,但是我在SQLyog工具的窗口里面执行是成功(工具里面自动转变成mediumtext类型了)。


mysql> set names utf8;Query OK, 0 rows affected (0.00 sec)mysql> DROP TABLE ttt;ERROR 1051 (42S02): Unknown table 'test.ttt'mysql> CREATE TABLE `ttt` (    -> `id` DOUBLE ,    -> `select_type` VARCHAR (57),    -> `table` VARCHAR (192),    -> `type` VARCHAR (65535),    -> `key` VARCHAR(20),    -> `possible_keys` VARCHAR (100),    -> `key_len`  VARCHAR (65535),    -> `ref` VARCHAR (11),    -> `rows` DOUBLE ,    -> `Extra` VARCHAR (765)    -> ); ERROR 1074 (42000): Column length too big for column 'type' (max = 21845); use BLOB or TEXT insteadmysql> set names gbk;Query OK, 0 rows affected (0.00 sec)mysql> DROP TABLE ttt;ERROR 1051 (42S02): Unknown table 'test.ttt'mysql> CREATE TABLE `ttt` (    -> `id` DOUBLE ,    -> `select_type` VARCHAR (57),    -> `table` VARCHAR (192),    -> `type` VARCHAR (65535),    -> `key` VARCHAR(20),    -> `possible_keys` VARCHAR (100),    -> `key_len`  VARCHAR (65535),    -> `ref` VARCHAR (11),    -> `rows` DOUBLE ,    -> `Extra` VARCHAR (765)    -> ); ERROR 1074 (42000): Column length too big for column 'type' (max = 21845); use BLOB or TEXT insteadmysql>

最后总结:这个可能是超过 一个表 关于 非十六进制字段 64k的限制了。

上官网:http://dev.mysql.com/doc/refman/5.5/en/column-count-limit.html:

Every table (regardless of storage engine) has a maximum row size of65,535 bytes. Storage engines may place additional constraints on this limit, reducing the effective maximum row size.

65,535所说明的是针对的是整个表的非大字段类型的字段的bytes总合。


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow


http://www.niftyadmin.cn/n/3653766.html

相关文章

Struts快速入门(四)

使用ActionForward导航ActionForward对象是配置对象。这些配置对象拥有独一无二的标识以允许它们按照有意义的名称如“success”,“failure”等来检索。ActionForward对象封装了向前进的URL路径且被请求处理器用于识别目标视图。ActionForward对象建立自元素位于str…

ORACLE 树形遍历查询根节点 父节点 子节点

1、准备演示数据创建表结构:-- Create table createtable Z_ORG( cid NUMBER, cname VARCHAR2(32), parent_id NUMBER, create_time DATE, org_level NUMBER) tablespace POWERDESK pctfree10 initrans1 maxtrans255; -- Add…

Struts原理与应用(完)

Chapter 7: Taglib and Other Skills Struts principle and practice TAGLIBStruts对Taglib进行了扩展, Struts提供了四种基本自定义Taglib以及两种附加Taglib: bean:struts-bean taglib包含在访问bean和bean属性时使用的tag,也包…

nginx中location中关于proxy pass和rewrite的应用

1,问题描述 upstream datacollectbackend{ #ip_hash; server 10.234.1.211:6100 max_fails5 fail_timeout30s; server 10.234.1.26:7100 max_fails5 fail_timeout30s; } location ~* ^/OCC_DATACO_WEB/.*$ { include deny.conf;…

Struts原理与应用(二)

Chapter 3: Struts Configuration Struts principle and practice Struts可以运行在任何一个支持JSP1.2和Servlet2.3的WEB Container中 Struts将所有的请求提交到同一个中心控制器,org.apache.struts.action.ActionServlet 类 web.xml配置 actionorg.apache.struts.…

泛型与模式

泛型与模式模式是面向对象技术深入应用的产物,它给了我们代码极大的动态性和灵活性,保证了系统的可扩展性。这是我们在面向对象分析和编码过程中广泛的使用模式的最重要的原因。但是实际的系统的需求是复杂的,复杂到我们使用了成熟的面向对象…

Java开发人员的十大戒律

Java开发人员的十大戒律作者:Aleksey Shevchenko对Java开发者来说,有许多的标准和最佳实践。本文列举了每一个开发人员必须遵从的十大基本法则;如果有了可以遵从的规则而不遵从,那么将导致的是十分悲惨的结局。1. 在…

MySQL服务器性能(通过Sysbench测试cpu io 内存以及mysql服务等)

-- Sysbench测试Sysbench的安装请参考:http://blog.csdn.net/mchdba/article/details/89512891 CPU测试 sysbench采用寻找最大素数的方式来测试CPU的性能[rootxx sysbench-0.4.12]# sysbench --testcpu --cpu-max-prime2000 runsysbench 0.4.12: multi-threaded sy…