Navicat向mysql数据库中导入sql文件常见报错问题总结及解决办法
Posted SummerGao.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Navicat向mysql数据库中导入sql文件常见报错问题总结及解决办法相关的知识,希望对你有一定的参考价值。
错误提示1:
Got a packet bigger than ‘max_allowed_packet‘ bytes
分析原因:
从navicat中导入sql文件过大, max_allowed_packet 针对的是一个事务中的一行记录大小,当一行记录超过了限制的大小,将会报错。sql文件中 每次insert完进同一张表的所有数据被称为一个数据包(packet) , max_allowed_packet 就是来限制这个的大小的阈值,大于这个值,mysql的I/O连接会关闭,就会报这个错。
解决办法:
调整 max_allowed_packet 大小(这里设置成:300M):
set global max_allowed_packet = 1024*1024*300;
flush privileges;
查询一下设置是否成功:
select @@global.max_allowed_packet;
重新导入问题解决。
错误提示2:
[Err] 1292 - Incorrect datetime value: 0000-00-00 00:00:00 for column xxx at row 1
分析原因:
上述报错中可以看出给 datetime 这种类型的字段赋值为 0000-00-00 00:00:00
是不被支持的,这是数据库模式的设置问题。
解决办法:
1、查询sql_mode
# 查看当前sql_mode
select @@sql_mode;
# 查看全局sql_mode
select @@global.sql_mode;
2、修改sql_mode(将上述查询到的sql_mode中的NO_ZERO_DATE和NO_ZERO_IN_DATE删除即可)
# 修改全局
set @@global.sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
# 修改当前
set @@sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
# 刷新
flush privileges;
重新导入问题解决。
未完待续.....
如何向mysql数据库中导入大批量数据?
导入时把生成索引给关掉,应该能快一点.不要一边导入一边建立索引.
8G数据,应该也不那么慢了.
把sql语句文件读取出一部分看看,建表语句中,应当有建立索引的部分,删掉它!
只做建表和插入数据两件事.
还有,看看数据库有没有外键?
尽量在插入数据过程中去掉外键关联.
等数据插入完成之后再加索引和外键,应该能提高很多读写性能.
截取一部分数据,例如100Mb.
插入一下试试,可以预先对整体时间有一个预期.
还有,真的要弄台好点的电脑,或者去借一台,等把数据导入完成之后,把msyql的库文件直接复制出来放自己机器上跑就好.
emm..
再追加点信息,要先搞明白,sql原文件里,到底都执行了哪几类操作?
可能需要你用c之类写点小工具,或者别的什么语言,分块读取并处理文件.
8G..
嗯,还好.
现在内存都够大,否则你都没法直接用软件打开了.
只有8G也可以直接用软件打开看.
停掉索引真的可以大幅度加快插入数据的速度.
建议试一试! 参考技术A 你双击dbf是什么程序打开的?vfp吗?
你可以使用set
printer
to
file
abc.sql
list
to
然后使用一个文本编辑器,如emeditor,编辑这个abc.sql,将内容构造为标准的sql语句:
insert
into
mytable
(a,b,c,d,e)
values
('dbf_field1','dbf_field2','dbf_field3','dbf_field4','dbf_field5')
然后在mysql
administrtor中,将这个abc.sql导入到数据库中就可以了。
以上是关于Navicat向mysql数据库中导入sql文件常见报错问题总结及解决办法的主要内容,如果未能解决你的问题,请参考以下文章
如何从Navicat for MySQL数据库中导出已经建好的数据库表,这样导出的要能再别的地方直接导入能用的,谢谢