我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中创建表失败如何解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中创建表失败如何解决

MySQL中创建表失败如何解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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

CREATE TABLE XXX

..此处省略260多个字段

`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

...

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中的默认参数设置如下:

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的设置。

) 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个(包括分区表);可以很明显看出这个表的设计就是根据业务的需求开始垂直扩展,其实可以拆分出一个逻辑表,逻辑数据很容易持续扩展,而不是在字段层面来不断扩展。

关于MySQL中创建表失败如何解决问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中创建表失败如何解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL创建数据表失败怎么解决

在MySQL创建数据表失败可能有多种原因,以下是一些常见的解决方法:检查语法错误:首先检查SQL语句是否正确,是否有拼写错误或者语法错误。检查权限问题:确保您有足够的权限来创建数据表。如果您没有足够的权限,联系数据库管理员获取必要的权限。检
MySQL创建数据表失败怎么解决
2024-04-09

win11创建pin失败如何解决

这篇文章主要介绍了win11创建pin失败如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win11创建pin失败如何解决文章都会有所收获,下面我们一起来看看吧。方法一: 1、如果你是在更换硬件或者修改了
2023-07-02

java虚拟机创建失败如何解决

如何解决Java虚拟机(JVM)创建失败?检查Java环境、重启计算机、增加堆内存、检查文件权限、禁用安全模式、检查系统资源、更新驱动程序、检查病毒或恶意软件、卸载并重新安装Java、检查依赖关系、检查GC日志、使用不同的JVM、联系供应商寻求支持。
java虚拟机创建失败如何解决
2024-04-13

java虚拟机创建失败如何解决

如果Java虚拟机创建失败,可以尝试以下解决方法:检查系统环境变量是否正确配置,包括JAVA_HOME和PATH变量。检查系统是否有足够的内存可用。可以尝试增加虚拟机的内存分配。确保安装的Java版本与应用程序要求的Java版本匹配。
java虚拟机创建失败如何解决
2024-04-09

sql创建数据库失败如何解决

创建数据库失败可能有多种原因,以下是一些常见的解决方法:1. 检查SQL语句是否正确:请确保SQL语句的语法和格式正确,包括正确的关键字、正确的表名和字段名等。2. 检查数据库权限:请确保当前用户有足够的权限来创建数据库。如果没有足够的权限
2023-08-25

mysql创建数据库失败怎么解决

检查权限:确保你有足够的权限来创建数据库。你需要使用具有CREATE DATABASE权限的MySQL用户。检查语法:确保你的CREATE DATABASE语句语法正确。正确的语法应该是:CREATE DATABASE database_n
mysql创建数据库失败怎么解决
2024-04-09

mysql数据库创建失败怎么解决

如果MySQL数据库创建失败,可能有多种原因导致,以下是一些常见的解决方法:检查MySQL服务是否正常运行:确保MySQL服务已经启动,并且没有发生任何错误。检查数据库名是否合法:数据库名不能包含特殊字符或者关键字,保证数据库名是合法的。检
mysql数据库创建失败怎么解决
2024-03-12

windows steam创建请求总失败如何解决

这篇文章主要讲解了“windows steam创建请求总失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows steam创建请求总失败如何解决”吧!解决方法:方法一: 1
2023-06-30

MySQL创建聚簇索引失败怎么解决

在MySQL中,创建聚簇索引失败可能是由于多种原因导致的,比如表中数据量过大、硬件资源不足、索引字段重复等。下面是一些可能的解决方法:检查表结构和索引字段:确保表结构和索引字段的设置正确,避免重复或错误的字段设置。优化表数据:如果表中数据量
MySQL创建聚簇索引失败怎么解决
2024-04-24

ubuntu在目录下创建文件失败如何解决

如果在Ubuntu系统中创建文件失败,可以尝试以下解决方法:检查权限:确保您拥有在目录下创建文件的权限。您可以使用ls -l命令查看目录的权限,并使用chmod命令更改权限。检查磁盘空间:确保目录所在的磁盘有足够的可用空间。您可以使用df
ubuntu在目录下创建文件失败如何解决
2024-04-08

ubuntu中安装mysql失败如何解决

这篇文章主要讲解了“ubuntu中安装mysql失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ubuntu中安装mysql失败如何解决”吧!原因:可能是原有的MySQL还有卸载残
2023-07-04

sql创建视图失败怎么解决

出现创建视图失败的原因有很多,可能是由于语法错误、权限不足、表或字段不存在等等。解决方法如下:检查语法:确保你的SQL语句没有语法错误,可以使用数据库提供的工具或在线SQL验证工具进行检查。确认语法正确后再次尝试创建视图。检查权限:确保你具
2023-10-26

mysql中如何创建表

在 mysql 中创建表涉及五个步骤:1. 打开 mysql 命令行;2. 连接到数据库;3. 使用 create table 语法指定列名和数据类型创建表;4. 执行查询;5. 使用 show tables 查询验证表是否已创建。MySQ
mysql中如何创建表
2024-04-14

win10搭建php7.1失败如何解决

本篇内容主要讲解“win10搭建php7.1失败如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win10搭建php7.1失败如何解决”吧!win10搭建php7.1失败的解决办法:1、打
2023-07-04

mysql启动失败1067如何解决

MySQL启动失败1067错误一般是由于MySQL配置文件(my.cnf)中的某些配置项出现问题或者MySQL安装文件损坏导致的。解决该问题可以尝试以下几个方法:1. 检查my.cnf配置文件:打开my.cnf配置文件,确认配置项是否正确。
2023-08-30

编程热搜

目录