在MySQL建表时,遇到一个奇怪的现象:

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 报Row size too large 65535 原因与解决方法相关推荐

  1. mysql可变65535_MySQL 报Row size too large 65535 原因与解决方法

    MySQL报错信息:Row size too large. The maximum row size for the used table type, not counting BLOBs, is 6 ...

  2. mysql 报错 get error 28 from storage engine 解决方法

    mysql 报错 get error 28 from storage engine 解决方法 参考文章: (1)mysql 报错 get error 28 from storage engine 解决 ...

  3. MySQL 实例空间使用率过高的原因和解决方法

    MySQL 实例空间使用率过高的原因和解决方法 参考文章: (1)MySQL 实例空间使用率过高的原因和解决方法 (2)https://www.cnblogs.com/drizzle-xu/p/ali ...

  4. mysql iops_MySQL实例IOPS使用率高的原因和解决方法

    问题描述 MySQL实例在日常使用中会出现实例IOPS使用率高的情况,本文将介绍造成该状况的主要原因和解决方法. 问题原因 实例内存满足不了缓存数据或排序等需要,导致产生大量的物理IO. 查询执行效率 ...

  5. mysql安装过程中failed_mysql安装失败原因和解决方法

    作者:CWS_chen 转载自https://blog.csdn.net/ mysql数据库安装不了了!mysql最后一步安装不上!mysql就是安装不上!是不是很头疼,很伤脑筋,现在大家不用着急了, ...

  6. npm安装报no such file or directory原因和解决方法

    公司用的是内网,所以 npm 下载也是通过公司的某个服务做代理实现安装的. 安装依赖的时候,总会有段时间,安装依赖出问题. 如图: 前几天还能正常安装,今天突然就报 no such file or d ...

  7. Mysql并发时经典常见的死锁原因及解决方法

    1.    mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁 ...

  8. Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析

    默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 ...

  9. mysql 死锁原因_Mysql并发时经典常见的死锁原因及解决方法

    1.mysql都有什么锁 MySQL有三种锁的级别:页级.表级.行级. 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒 ...

最新文章

  1. java ldap 登陆AD域 查找某个帐号 查找某个组织单位
  2. 解决eclipse中Mybatis框架下sql语句执行后控制台不显示日志问题
  3. ETH 开发环境搭建及智能合约 helloworld
  4. 网络协议之:加密传输中的NPN和ALPN
  5. .net应用程序中添加chm帮助文档打开显示此程序无法显示网页问题
  6. strtolower_PHP strtolower()函数与示例
  7. NI笔试——大数加法
  8. java mysql体检管理系统源码
  9. 小米手机(MIUI 13)安装Fiddler CA证书
  10. 12 | 腾讯云代码分析快速部署
  11. 视频流服务器-red5的安装与使用
  12. Linux Base VIII 压缩和解压缩命令
  13. WARNING:tensorflow:`add_update` `inputs` kwarg has been deprecated.
  14. Windows系统安装了虚拟机后,网络无法修复且无网络连接如何修复?跟随作者一起来寻找问题并解决吧
  15. 南都娱乐周刊否认爆料文章出轨因与其有私人恩怨
  16. 认识计算机操作系统ppt,使用操作系统,认识计算机.ppt
  17. 以下哪个学术搜索引擎主要用于搜索计算机科学的相关资源,利用搜索引擎检索相关教学资源,所得搜索结果通常由以下哪几部分构成()?...
  18. 从护士“逆袭”微软中国总裁,打工女皇消失20年后重出江湖回应2亿年薪传闻...
  19. php是菲律宾吗,“PHP”是“Philippine Peso”的缩写,意思是“菲律宾比索”
  20. ddrelease64 黑苹果_[原]红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新7.7】...

热门文章

  1. 基于Windows Media技术的流媒体系统的设计与实现
  2. 腾讯调架构:MIG总裁离任 重点放在平台型业务
  3. 阴沟里翻船——学霸的迷宫
  4. sql文件导入阿里云RDS数据库操作
  5. 无需软件,简单实现电脑微信双开
  6. 深度强化学习在机器人领域的研究与应用
  7. 蓝牙核心协议  蓝牙芯片结构
  8. mkv文件怎么转成mp4,这些方法5分钟学会
  9. Matlab中fft函数详解
  10. Oracle Net Service:监听器与服务名解析方法