ERROR 1118 (42000): Row size too large. The maximum row size for the used table type

报错sql 

CREATE TABLE `modo_notify` (
    ->   `notify_id` varchar(32) NOT NULL,
    ->   `audience_type` varchar(128) DEFAULT NULL,
    ->   `notify_audiences` varchar(1024) DEFAULT NULL,
    ->   `notify_content` varchar(4000) DEFAULT NULL,
    ->   `create_date` varchar(64) DEFAULT NULL,
    ->   `create_user` varchar(128) DEFAULT NULL,
    ->   `end_date` varchar(64) DEFAULT NULL,
    ->   `notify_files` varchar(4000) DEFAULT NULL,
    ->   `notify_images` varchar(4000) DEFAULT NULL,
    ->   `publish_date` varchar(64) DEFAULT NULL,
    ->   `recieve_users` varchar(1024) DEFAULT NULL,
    ->   `notify_title` varchar(128) DEFAULT NULL,
    ->   `notify_type` varchar(1024) DEFAULT NULL,
    ->   `valid` varchar(128) DEFAULT NULL,
    ->   `file_name` varchar(512) DEFAULT NULL,
    ->   `file_path` varchar(512) DEFAULT NULL,
    ->   PRIMARY KEY (`notify_id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


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 BLOBs

意不意外,惊不惊喜。

分析

chatGpt一问

MySQL中的错误ERROR 1118 (42000)表示单行的数据长度超过了允许的最大值。这通常发生在InnoDB表中,因为InnoDB有一个限制,即单行的最大长度不能超过65535字节。这个限制主要来自于InnoDB的页大小,通常是16KB

解决方法:

  1. 减少列的数量或者减少每个列的数据类型大小。

  2. 使用VARCHARTEXTBLOB数据类型代替CHARENUM类型,因为VARCHAR类型能够更高效地存储大数据。

  3. 如果是因为单个列的长度过长(如VARCHAR(255)TEXT列在存储较大数据时),考虑减少这些列的最大长度。

  4. 如果是因为索引太多,考虑减少不必要的索引,或者重新设计数据库模式,使用更合适的数据类型。

  5. 如果确实需要存储大量数据,可以考虑将大字段拆分到其他表中,通过JOIN查询来使用这些数据。

看其他大神的解答

报错原因:

MySQL 建表时有一个单行最大限制长度限定:一张表中所有字段设置的字节数总和不大于 65535 字节。

注意点一:单个字段大小超过 65535 转换为 TEXT。
注意点二:其余字段总和不超过 65535 字节(不包括 BLOB/TEXT)。
注意点三:数据库使用 UTF-8 编码,一个字符 = 三个字节大小(使用编码不同,字节数大小略有不同)。
报错举例:数据库存在 10 个 varchar 字段,每个大小为 3000 则数据库单行目前计算长度为 3000 * 10 * 3 = 90000 > 65535 ,则建表时就会报错。

解决办法:

将数据库表大字段类型设置为 TEXT,或者将部分可以减小长度的长度调小至总和小于 65535。

调整完之后,执行建表语句,又报如下错误:

1. Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值