navicat运行SQL文件1577、1153、1292错误

错误提示 1577:

[DTF] Data Transfer start
[DTF] Getting tables
[DTF] Getting views
[DTF] Getting functions
[DTF] Getting events
[ERR] 1577 - Cannot proceed because system tables used by Event Scheduler were found damaged at server start
[DTF] Finished unsuccessfully

官方:https://help.navicat.com/hc/en-us/articles/218283617-1577-Cannot-proceed-because-system-tables-used-by-Event-Scheduler-where-found-damaged-at-server-start

因为是回过头来总结,这个官方文档我是打开过,但history好像没有相关的操作记录,印象中就是修改了max_allowed_packet=64M后没有的。

补充:1577错误又出现了,原来是本地的数据库报的这个错误。


错误提示 1153:

[ERR] 1153 - Got a packet bigger than 'max_allowed_packet' bytes

MySQL默认限制了运行SQL数据库的大小,修改/etc/my.cnf,加入下面的语句,64M根据数据库文件大小相应修改即可。

max_allowed_packet=64M

直接修改配置文件相比运行一些命令来得简单,修改后重启mysqld就能正常导入了。php、nginx都有类似的限制,php中将/etc/php.ini文件加入post_max_size = 64M和upload_max_filesize = 64M两句重启即可,nginx中将/etc/nginx/nginx.conf文件http区块中加入client_max_body_size 64m;重启即可。


错误提示 1292 :

[ERR] 1292 - Incorrect datetime value: '0000-00-00 00:00:00' for column 'post_date_gmt' at row 1 [ERR]

参考地址:

https://www.prestashop.com/forums/topic/493398-mysql-57-causes-error-when-ps-try-to-insert-date-as-0000-00-00-000000/

MySQL 的设置问题,打开/etc/my.cnf配置文件,加入(如果没有)或者修改(如果有)为:

sql-mode="NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO"

重启MySQL服务再次导入成功完成。

但不知道这样修改是否有什么安全影响,所以有必要了解一下这几个参数具体什么意思:

sql_mode常用值

ONLY_FULL_GROUP_BY:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO:

该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

STRICT_TRANS_TABLES:

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:

在严格模式下,不允许日期和月份为零

NO_ZERO_DATE:

设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER:

禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:

将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES:

启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

参考地址:http://xstarcd.github.io/wiki/MySQL/MySQL-sql-mode.html

根据以上说明就很容易理解了,再通过navicat进入数据库表中看一眼,确实存在日期为“0000-00-00 00:00:00”的数据,如图,来源一些未发表自动保存的草稿缓存。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注