如何解决SQLSTATE [42000](语法错误或访问冲突:1118行大小太大(8126)在MySQL 5.7中)

本文概述

  • 1.找到my.cnf文件
  • 2.增加innodb_log_file_size的值
如果你使用的是MySQL 5.7, 并且在存储许多文本格式的字段时发现异常:
SQLSTATE [42000]:语法错误或访问冲突:1118行大小太大(> 8126)。将某些列更改为TEXT或BLOB或使用ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED可能会有所帮助。在当前行格式中, 内联存储768个字节的BLOB前缀。
并且你确定表的行格式设置为Dynamic, 你可能会遇到innodb日志文件大小和严格模式的问题。在本文中, 我们将向你展示如何防止此异常在MySQL 5.7中出现。
1.找到my.cnf文件第一步, 你需要搜索MySQL的配置文件。没有内部MySQL命令可跟踪此文件的位置, 因此该文件可能位于5个(或更多)位置, 并且它们均有效, 因为它们会加载级联:
  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • $ MYSQL_HOME / my.cnf
  • [datadir] /my.cnf
  • ?/ .my.cnf
这些是MySQL查看的默认位置, 但是, 如果仍然找不到正确的文件, 则可以在终端上运行以下命令:
find / -name my.cnf

找到文件后, 请使用CLI编辑器(如nano)将其打开, 然后继续下一步。
2.增加innodb_log_file_size的值在我们的例子中, 该文件位于/etc/mysql/my.cnf, 因此我们可以使用带有以下命令的文件使用nano编辑该文件:
nano /etc/mysql/my.cnf

你将需要禁用MySQL的严格模式并增加innodb日志文件的大小。启用innodb_strict_mode时, InnoDB在某些情况下会返回错误而不是警告。与许多数据库管理系统一样, MySQL使用日志来实现数据持久性(使用默认的InnoDB存储引擎时)。这样可以确保在提交事务时, 不会因崩溃或断电而丢失数据。 MySQL的InnoDB存储引擎使用固定大小(圆形)的Redo日志空间。大小由innodb_log_file_size控制。如果增加此属性的值, 则在MySQL 5.7中存储多列文本时将摆脱此异常。
本文将不讨论有关innodb日志文件大小合适的主题, 而是建议你阅读本文, 其中包含有关如何选择此值的详细说明和事实。由于我们只是与你共享此问题的解决方案, 因此我们将使用512M的值, 因此要添加到my.cfn文件的mysqld块中的参数将是:
# Important: inside the mysqld block[mysqld]# Add new log file sizeinnodb_log_file_size=512M# Disable strict modeinnodb_strict_mode=0

文件外观的示例:
## The MySQL database server configuration file.## You can copy this to one of:# - "/etc/mysql/my.cnf" to set global options, # - "~/.my.cnf" to set user-specific options.## One can use all long options that the program supports.# Run program with --help to get a list of available options and with# --print-defaults to see which it would actually understand and use.## For explanations see# http://dev.mysql.com/doc/mysql/en/server-system-variables.html## * IMPORTANT: Additional settings that can override those from this file!#The files must end with '.cnf', otherwise they'll be ignored.#!includedir /etc/mysql/conf.d/!includedir /etc/mysql/mysql.conf.d/[mysqld]# Add new log file sizeinnodb_log_file_size=512M# Disable strict modeinnodb_strict_mode=0

尽管我们没有涵盖由动态行格式消除的行大小限制所引起的问题的详细说明, 但你可能需要访问本文来告知自己有关此问题的信息。将更改保存到文件中后, 根据操作系统和安装过程使用cli重新启动mysql, 例如:
# Ubuntusudo service mysql restart# CentOS/etc/init.d/mysqld start

【如何解决SQLSTATE [42000](语法错误或访问冲突:1118行大小太大(8126)在MySQL 5.7中)】编码愉快!

    推荐阅读