首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL创建表失败的问题

MySQL创建表失败的问题

作者头像
jeanron100
发布于 2018-03-22 02:45:35
发布于 2018-03-22 02:45:35
5.7K00
代码可运行
举报
运行总次数:0
代码可运行

今天有一个朋友问我一个MySQL的建表问题,问题的现象是创建表失败,根据他的反馈,问题比较奇怪,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE XXX 

..此处省略260多个字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  `xxxxIsAllowIn` varchar(4) COLLATE utf8_bin DEFAULT NULL COMMENT 'xx是否准入(是,否)',
  `xxxxIsAllowIn` varchar(30) COLLATE utf8_bin DEFAULT NULL COMMENT '理财-准入',
  PRIMARY KEY (`SERIALNO`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='???????”3èˉ·?????ˉ';

是的,你没有看错,还有乱码,根据朋友反馈的现象是在生产环境可以创建成功,但是测试环境创建失败。

报错信息为:

ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

我把文本拷贝到本地,想复现,结果因为乱码直接执行失败,对于这种情况,还是同事帮我做了下问题过滤,采用如下的方式即可把注释删除。

cat a.sql |sed 's/COMMENT'.*'/,/g'

所以省事了不少,我就来继续分析这个问题。一般来说这个错误看起来是单行的数据超出限制了,因为MySQL里面每行的数据有一个65535的限制,想必是这个原因吧。

但是朋友反馈是没有超出这个限制的,根据里面的字符类型做计算,发现确实没有达到65535.

所以这个问题就微妙起来,我们来说说几种解决方式。

解决方式1:

修改存储引擎,设置为myisam

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  KEY `idx_customerName` (`CUSTOMERNAME`)
) ENGINE=myisam DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
"c.sql" 276L, 16070C written
mysql> source c.sql
Query OK, 0 rows affected (0.07 sec)

MyISAM有3种行存储格式:fixed/dynamic/compressed,InnoDB在这个基础上增加了Barracuda的格式。

5.7中的默认参数设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show variables like '%format';
+---------------------------+-------------------+
| Variable_name             | Value             |
+---------------------------+-------------------+
| binlog_format             | ROW               |
| date_format               | %Y-%m-%d          |
| datetime_format           | %Y-%m-%d %H:%i:%s |
| default_week_format       | 0                 |
| innodb_default_row_format | dynamic           |
| innodb_file_format        | Barracuda         |
| time_format               | %H:%i:%s          |
+---------------------------+-------------------+
7 rows in set (0.00 sec)

所以现在的问题差异就在于MyISAM和InnoDB。

共享表空间的格式为Antelope,在5.5中默认就是这个格式。

解决方式2;

这个问题我做了一些测试。对比了字符集,row_format的设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
) ENGINE=innodb row_format=dynamic  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;   
"c.sql" 276L, 16090C written
mysql> source c.sql   
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB p

) ENGINE=innodb row_format=compact  DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
"c.sql" 276L, 16090C written
mysql> source c.sql   
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

) ENGINE=innodb   DEFAULT CHARSET=latin1;
"c.sql" 276L, 16056C written
mysql> source c.sql   
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

得到的一个初步结论就是先设置innodb_strict_mode为off,默认5.7是开启的,当然从MySQL5.5版本开始,可以开启InnoDB严格检查模式,如果采用了页数据压缩功能后,建议是开启该功能。在创建表,更改表和创建索引时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里。

当然这个里的这个问题现象确实比较纠结。

解决方法3:

从表结构设计入手,尽可能拆分这个表的逻辑,把它拆分为多个表。一个表的字段数尽可能不要太多。数据库、表数量尽可能少;数据库一般不超过50个,每个数据库下,数据表数量一般不超过500个(包括分区表);可以很明显看出这个表的设计就是根据业务的需求开始垂直扩展,其实可以拆分出一个逻辑表,逻辑数据很容易持续扩展,而不是在字段层面来不断扩展。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
无聊时听什么?这款电台小程序,听你喜欢的
今天,知晓程序(微信号 zxcx0101)要推荐的小程序,名字就叫做「FM 阿基米德」。
知晓君
2018/08/01
5500
无聊时听什么?这款电台小程序,听你喜欢的
微信小程序正式发布!这是最全的上手指南
2017 年 1 月 9 日,是一个值得载入互联网史册的日子。 这一天,零点刚过,张小龙和他的团队,在夜色笼罩下,正式发布了微信小程序。 所以,从这一刻开始,只要有开发者登录小程序后台,并在「开发管理
知晓君
2018/06/28
1.5K0
亲测:小程序到底耗流量吗?| 小程序问答 #19
不过,「比较多的流量」,到底是多少?小程序和网页、app 相比,会不会消耗更多的流量呢?
知晓君
2018/08/01
2.5K0
这个程序员爸爸,专门做了款小程序,教会小孩认字 | 晓组织 #9
由于一次学校的网页比赛误入前端行业,现一直从事前端方面的工作。这次非常意外又惊喜的收到知晓程序(微信号 zxcx0101)的邀请,来说一说我的第一款小程序「看图识字」背后的一些事。
知晓君
2018/08/01
8210
这个程序员爸爸,专门做了款小程序,教会小孩认字 | 晓组织 #9
有了微信小程序,你会卸载原生 App 吗?
文 | 槽君 微信小程序发布后,网络上对微信小程序的讨论很火爆。 我也第一时间体验了微信小程序。小程序在加载速度、基础交互等方面,确实比单纯的网页体验好很多,也比 app 轻便不少。 首先,小程序里的功能基本上都是服务类的,比如订餐、买车票等。像个人资料的修改、分享朋友圈等,这些接口都没开放。 不过最近不断有新的小程序上线,其他种类小程序也可能会逐渐上线。 其次是小程序没有烦人的广告推送。有了小程序,至少目前,你不用担心会有广告的存在。 小程序的第一印象 小程序支持置顶聊天显示,这是我最先感受到的一个特点。
知晓君
2018/06/28
1.3K0
体验了150个小程序以及我的思考
【高频使用】 美团外卖+ 纯点餐没有叽叽歪歪的各种活动让你不知道吃什么,自动定位功能比较准,第一次登陆要绑定下手机号,大多数人的好评小程序。 滴滴公交查询 基于地理位置的服务,授权后自动给你最近的公交,也能搜索你要查的公交,公交线路的每个站点的时间和距离都能实时更新,有首末班车时间信息,有大概票价信息。不足就是不能根据目的地查询公交路线。纯小工具,如果是等公交的人,或在室内要预计出门时间的人都十分实用。无需任何账号注册或者授权。 车来了 首页太乱信息量过多,有个最近使用和收藏功能,觉得有点多余了。本来就叫
顶级程序员
2018/04/26
2.1K0
微信小程序的再思考:什么才是正确的打开方式?
文 | 唐思思 写在前面 一个月前,关于小程序的讨论热火朝天,万众瞩目;一个月后,朋友圈里却已经很难再刷到关于小程序的帖子。 是新鲜劲过了,还是小程序并没有如大家预期的那样显著改变大家的使用行为?你的手机里又卸载了几个 app,转而使用小程序? 总结成一个问题:说好的「app 杀手」呢? 核心观点 微信小程序的目的是实现移动互联网时代唾手可得的服务模式。它没有为 app 引流,也没有计划代替 app,更没有想做分发平台。开发者和市场对小程序的理解有偏差。 微信小程序的核心价值是线下场景应用而不是线上服务,开
知晓君
2018/06/28
5911
我们采访了 5 个「名字很长」的小程序,他们到底是怎么想的?
不能同名,但想让用户能轻易搜索到自己的小程序,该怎么办?于是,很多无可奈何、掏空心思,又追悔莫及的名字诞生了。
知晓君
2018/08/01
6150
我们采访了 5 个「名字很长」的小程序,他们到底是怎么想的?
小程序才是企业的生存之道,小程序问答-带你快速了解小程序常见问题.
21世纪以来,世界每天都在以惊人的速度在更新、发展中,许多的东西大致上昨天今天并没有变化,但一旦隔上一两个月变化就十分明显了。更不要说互联网,一个由代码所构建起来的世界里,每天的变化多到无法精准计算,发展速度快到无法捕捉。
用户1745481
2019/01/09
7090
一篇文章读懂微信小程序 | 观点
知晓程序注: 虽然小程序发布公测已经快一个月了。 但知晓程序(微信号 zxcx0101)发现,很多用户还不清楚小程序是什么?该不该加入小程序创业的浪潮? 为了解答大家的疑惑,今天就给大家分享一篇白崎在小程序发布内测后写的这篇文章,让你一篇文章读懂微信小程序。 如果想深度探讨小程序创业的话题,现在报名参加「未来小程序 x MindTalk」线下活动,5 位导师带你一起拨开小程序创业的迷雾(报名方式见文末)。 文 | 白崎 距离张小龙的那场首次公开演讲已经有九个月了,而在那场演讲中,备受关注的「应用号」在千呼
知晓君
2018/06/28
1K0
《增长黑客》节选与笔记[通俗易懂]
这本书涉及了很多具体又贴合现实的互联网产品问题,即使你是非专业人士,也应该读一读,了解开发者是如何把你当猫耍的,以便你更好地认识一些套路,解锁,为选择手机软件或者云端应用擦亮眼睛!
全栈程序员站长
2022/08/27
7.9K0
重构区块链
撰写这篇手册,并不简单的因为区块链是一个热门话题,更因为随着研究的深入,你会发现这是一个相当复杂的领域。关于这一话题的信息来源无外乎三个方面:技术文档和代码,商业机构的宣传,研究机构或个人的整理。但是每一种媒体都因其形式、渠道或作者而带有某种偏见。技术文档固然详细精确,但是不够通俗,视野也不够广阔;商业宣传必定带有一定的偏向性;而看似中立的研究机构和媒体也因其背后资助方或者受众市场的差异而显现出意识形态的不同。区块链领域的技术人员喜欢强调其技术领先性,但偏偏这一领域在学术界还没有一致的评判标准。区块链商业机构流行的白皮书,只有极少数既保留了技术细节,又蕴含对整个体系的理解。媒体和研究机构里则存在一种悖论,那些对区块链理解不够深,但是想象力丰富的人,率先推出了所谓的畅销书,只能让普通人初步理解一些浅层的知识,无法用来灵活运用和价值创造。只有那些深入区块链一线的研究员才会意识到,这个领域还处在高速变化期,很多东西都没有定性,出书立著为时尚早。
全栈程序员站长
2022/07/23
10.1K0
重构区块链
电脑史话(说历史视频)
从1980年8月到1981年8月,在整整一年的时间里,埃斯特奇领导着“国际象棋”工程计划13人小组奋力攻关。“当时很少有人体会到,这一小组人即将改写全世界的历史。”(英特尔华裔副总裁虞有澄语)据说,IBM公司后来围绕PC机的各项开发,投入的力量逐步达到450人,英特尔公司也组成“特殊客户部”为PC机供应高质量的芯片。   根据协定,微软公司应该为PC机提供包括BASIC在内的系列电脑语言软件。然而,未来的PC电脑,最需要的软件是操作系统,于是,比尔·盖茨把IBM的代表介绍给了另一家以研制CP/M操作系统软件闻名的DR数字研究公司。   接下来发生的事情又出现了戏剧性情节,CP/M操作系统软件的设计者基多尔恰好不在家,而他的太太又不愿在保密协定上签字画押,千载难逢的机遇与DR公司失之交臂。   IBM的代表只得掉转头来,仍请微软公司帮助解决操作系统的问题。比尔·盖茨急中生智,想起了西雅图电脑公司的软件天才帕特森(T.Paterson),此人早就为英特尔的16位芯片编写了一个QDOS软件,正好可以充当PC机的操作系统。QDOS即“快而粗糙的操作系统”,微软公司以低价购买到这款软件的版权,只是当时帕特森这位“DOC之父”并不知晓内情。   1980年感恩节刚过,“国际象棋”工程小组把IBM公司的最高机密──两台PC电脑的样机,从迈阿密空运到西雅图。同样在高度保密的条件下,比尔·盖茨率领着微软公司的软件小组开始为PC电脑编写程序。他们的任务除了需要赶写BASIC、COBOL、FORTRAN和PASCAL四种电脑语言的4万个程序代码,还要把QDOS改造成适合PC机使用的MS-DOS操作系统。从此,微软和IBM公司两个小组的技术人员,不断地乘飞机来来往往,飞越美国距离最远的两个城市,相互交换信息。微软的工程师还必须把自己关在密不透风的房间里,满头大汗地日夜加班。比尔·盖茨大量招聘编程高手,使参加PC机软件工程的人员增加到了70人。直到1981年6月,帕特森也加盟微软公司,并立即参加到MS-DOS的开发之中,经过反复修改和调试,终于完成了这件影响深远的著名软件。   一年的时间转瞬而至。1981年8月12日,IBM公司在纽约市对外宣布:IBM PC机横空出世,昭示着人类社会跨进了个人电脑的新时代。应该说,这是由英特尔公司提供微处理器芯片、微软公司编写软件、IBM公司主要设计电脑系统的共同作品。   IBM PC机最重要的特点在于它的开放性。埃斯特奇代表设计部门宣布,他们将把所有的技术文件全部公开,热诚欢迎同行加入个人电脑的发展行列。于是乎,全世界各地的电子电脑厂商一轰而上,争相转产仿造PC机,仿造出来的产品就是IBM PC兼容机。不久,IBM PC机就成为个人电脑“事实上的标准”。   为了推广这种供个人使用的电脑,IBM公司巧妙地借助卓别林式的小流浪汉形象,头戴园顶高帽,身着灯笼裤,滑稽可爱地在电视上频频露脸,手里舞动着个人电脑,表示人人都能够使用。《华尔街日报》评论说:IBM大踏步地进入微型电脑市场,蓝色巨人可望在两年内夺得这一新兴市场的领导权。果然,就在1982年内,IBM PC机卖出了25万台,以每月2万台的速度迅速接近了“苹果”。1983年5月8日,IBM公司推出改进型IBM PC/XT个人电脑,增加了硬盘装置,当年就使市场占有率超过76%。1984年8月14日,IBM公司趁胜又把一种“先进技术”的IBM PC/AT机投向用户的怀抱。AT机采用英特尔公司后来发展的80286微处理器芯片,能管理多达16M的内存,并可以同时执行多个任务。从此,个人电脑开始了所谓286、386、486……的接力赛跑。   1982年,美国著名的《时代》周刊在介绍本年度“新闻人物”时曾满怀激情地写到:“在一年的新闻里,这个最吸引人的话题,它代表着一种进程,一种持续发展并被广泛接受和欢迎的进程。这就是为什么《时代》在风云激荡的当今世界中选择了这么一位新闻人物,但这完全不是一个人物,而是一台机器。”   这个史无前例的“新闻人物”,就是个人电脑IBM PC机。
全栈程序员站长
2022/07/31
3.4K0
上帝掷骰子吗–量子物理史话
大家好,又见面了,我是你们的朋友全栈君。   上帝掷骰子吗–量子物理史话   第一章黄金时代   一   我们的故事要从1887年的德国开
全栈程序员站长
2022/06/26
7.5K0
相关推荐
无聊时听什么?这款电台小程序,听你喜欢的
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档