MySQL还原.sql备份格式的数据,有时会遇到错误,原因可能是字符集错误,经验上至少包括Incorrect string value 与 ERROR:Unknown command 这两个错误,可以考虑在导入脚本上加入 –default-character-set 参数指定.sql文件字符编码;特别的,如果包含表情符等字符的,最好使用 utf8mb4 而不是utf8。
一个具体案例,如下截图所示,
ERROR 1366 (22007) at line xx: Incorrect string value: '\xF0\x9F\x8C\xBF' for column xx at row x
备份文件包含了 create table 语句,实际还原时要忽略掉这部分,因此使用 sed过滤掉前面46行。原来以为这种错误行很少,加了–force参数忽略错误行而继续,但太多,于是Ctrl-c中止了。之后加上 –default-character-set=utf8mb4 参数,就顺便执行,没有错误。
————– 下面是多年前的老版本文件,仅为参考而保留 —————
使用mysql命令行客户端,使用source导入备份文件,但导入中出错,
ERROR:
Unknown command ‘\\’.
ERROR:
Unknown command ‘\”.
ERROR:
Unknown command ‘\\’.
ERROR:
Unknown command ‘\”.
ERROR:
Unknown command ‘\\’.
ERROR:
Unknown command ‘\”.
ERROR:
Unknown command ‘\\’.
ERROR:
Unknown command ‘\”.
并且直接出现win32程序错误的提示,mysql客户端自动退出。
上网查询有人说是编码问题,在连接服务器端时命令中指定编码,如下形式
>mysql -uroot -pxxxxxx --default-character-set=utf8
要还原的数据库本身是gbk编码,但备份文件是utf-8,于是在连接时指定为gbk,但导入中照样出错。于是改用utf-8,出上命令行所未,居然好了,完全导入成功,2G多的数据库。
看来mysql的字符编码问题还要多多了学习,有点深奥。
是为手记20110526
—— 后记 20110603——————-
一定要在连接mysql时,使用–default-character-set=utf8 参数,而不是在连接后使用 set names utf8 ,经测试,这样不行的。
好!真的是救命贴啊
救命贴
感谢