在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,这个基本的建表限制都还不知道,惭愧啊。。

转载请注明来源: MySQL 建表字段长度的限制问题
http://www.php1.cn/Content/MySQL_JianBiaoZiDuanChangDuDeXianZhiWenTi.html

MySQL 建表字段长度的限制问题相关推荐

  1. MySQL建表字段长度的限制、汉字和字母占字节数

    varchar(N),N指的是最大字符数,不是字节数. 记住: (1)MySQL要求一个行的定义长度不能超过65535. (2)单个字段如果大于65535,则转换为TEXT . (3)单行最大限制为6 ...

  2. NAVICAT MYSQL 建表字段 默认值、EMPTY STRING、空白、NULL 的区别

    Navicat mysql 建表字段 默认值.empty string.空白.NULL 的区别 总结在最后,没啥干货 简单测试了4种类型 bigint tinyint varchar char 单引号 ...

  3. mysql建表字段属性为clob_MySQL建表的优化策略

    MySQL 建表的优化策略 目录 1. 字符集的选择 1 2. 主键 1 3. 外键 2 4. 索引 2 4.1. 以下情况适合于创建索引 2 4.2. 以下的情况下不适合创建索引 3 4.3. 联合 ...

  4. mysql修改表字段长度和添加表字段

    1.修改表字段长度 alter table message_record modify column title varchar(130); alter table 表名 modify column ...

  5. mysql 创建表字段长度范围_Mysql的建表规范与注意事项

    一. 表设计规范 库名.表名.字段名必须使用小写字母,"_"分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用Inno ...

  6. mysql 创建表字段长度范围_老板要我把这份MySQL规范贴在工位上!

    前言 因为工作岗位的原因,负责制定了关于后端组数据库的规约规范,作为所有产品线的规范,历经几版的修改,最终形成下边的文本. 规范在整个后端执行也有大半年的时间,对于整个团队在开发阶段就减少不恰当的建表 ...

  7. mysql建表字段不能重复_MySQL建表的一些约束条件

    1.SQL :结构化查询语言(Structer Query Language) 包含DDL,DCL ,DML,TCL四种语句 DDL:create / alter / drop DCL: grant ...

  8. MySQL建表字段标红

    字段在英文状态下的引号标红,切为中文状态下的引号后建表成功.

  9. MySQL计算表字段长度LENGTH

    计算表中字段的长度:LENGTH(字段名) SELECT cus_ciq_no,LENGTH(cus_ciq_no) FROM tb_stockorder WHERE cus_ciq_no IS NO ...

最新文章

  1. 姚期智施尧耘获FOCS 2021时间检验奖,MIT华人学霸毛啸摘最佳学生论文奖
  2. KeyMob:建立一个稳定的移动广告聚合平台!
  3. 全球与中国OLED大平板涂胶显影设备市场运营状况分析及投资前景建议报告2022-2028年版
  4. Tomcat:Error starting static Resources
  5. JSONP 初步学习--但是还是有疑问
  6. eShopOnContainers 是一个基于微服务的.NET Core示例框架
  7. Java技术知识点的一些总结
  8. SpringBoot2 整合 CXF 服务端和客户端
  9. 计算机考研去哪个城市,2019计算机考研:考研热门城市院校排名
  10. struck在c语言中的作用,C语言-选择题及答案.doc
  11. Bailian4147 汉诺塔问题(Hanoi)
  12. 每一次结束只是一次新的起点,深有体会。
  13. Web 前端常用插件
  14. 华为ensp的缺省_网络 华为 ensp 命令
  15. Linux服务器发包
  16. 一张纸的厚度是0.0001米,将纸对折,问对折多少次厚度超过珠穆朗玛峰8848米
  17. css3中-moz、-ms、-webkit,-o分别代表的意思,以及微信浏览器内核分析
  18. 基于上下文的业务流建模法(二)
  19. cv面试百问day2
  20. 10分钟教你搭建nexus,并把自己项目中的依赖上传到私服

热门文章

  1. iframe跨域自适应高度
  2. OpenCV中findContours函数的使用
  3. C# 获取FormData数据
  4. IT项目的面向对象分析设计、开发及管理
  5. 高通摄像头调试(OV8856)
  6. real210开发板tslib1.4移植
  7. python 动态_python实现动态创建类的方法分析
  8. 图解ARP协议(四)代理ARP原理与实践(“善意的欺骗”)
  9. 海啸(二维前缀和/二维树状数组)
  10. 新年第一赛,提交BUG奖励多