前言
之前查询数据问题时多次使用过数据库导出导入命令,从来没发生过这种错误,那是一个风和日丽的上午,忽然来了一个紧急的任务,线上数据出问题了,需要马上处理一下,连上数据库备份服务器,找到备份数据直接下载下来,优雅(cong mang)地处理着这一切,本打算在Windows上直接导入查询处理一下算了,结果忙中添乱,导入数据库时居然报了一大堆错误,其中最扎眼的就是一连串的ERROR: Unknown command ‘\0’,没办法了,先找一台Linux服务器,上传导入数据分析处理一气呵成,处理完线上问题终于有时间回头来看看这个问题了。
测试环境
数据库版本
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.28-log MySQL Community Server (GPL)
Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
系统版本
- Win10马马虎虎版
本来打算用来快速处理的,结果添了不少乱
问题出现过程
直接使用cmd命令行输入mysql -uroot -h192.168.1.101 -p
,然后输入密码后成功登录,接着选择数据库use dbtest
,导入数据库文件source E:\onlinedb.sql
,结果意外发生了,出现了一大堆的如下错误:
……
……
ERROR:
Unknown command ‘\0’.
ERROR:
Unknown command ‘\0’.
ERROR:
Unknown command ‘\0’.
ERROR:
Unknown command ‘\0’.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual …
命令行界面中出现了多次错误提醒ERROR: Unknown command '\0'.
,最后有一个常见的语法错误提醒,看到这个'\0'
,这个字节中的0,程序中nullptr
,我猜到可能是编码问题,而最后的语法错误也是由于编码不同而部分解析导致的,于是查了一些资料发现果然是编码问题,只要在客户端连接Mysql服务器时指定UTF8编码就可以了。
问题结果过程
导入的流程不变,只要在客户端连接Mysql服务器时指定编码就可以避免前面遇到的错误,连接时的命令修改为mysql -uroot -h192.168.1.101 -p --default-character-set=utf8
就没问题了,上面提到的语法错误也不存在了。
其实这种跨平台的坑有很多,因为平台之间的哲学思想不同,导致对一些默认值的处理不太一样,同样的文件在Windows平台上导入报错,但是我换到Linux服务器上就没有任何问题,接触多了自然就释然了。
总结
- 导入sql文件时报错
ERROR: Unknown command '\0'
需在Mysql命令行客户端连接服务器时指定编码 - 连接时指定编码的格式为
mysql -uroot -h192.168.1.101 -p --default-character-set=utf8