4 个 unicode 字符出现在文件中的前几个字符中,但在 vim 中似乎无法显示

4 个 unicode 字符出现在文件中的前几个字符中,但在 vim 中似乎无法显示

vi data.sql

-- MariaDB dump 10.19  Distrib 10.4.28-MariaDB, for Win64 (AMD64)

但当我这样做时,head -n 10 data.sql我得到的第一行是

��-- MariaDB dump 10.19  Distrib 10.4.28-MariaDB, for Win64 (AMD64)

因此我在导入时得到了这个:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '??-' at line 1

那么我该如何纠正这个问题?

答案1

获取文件开头的十六进制数;参见https://mysql.rjweb.org/doc.php/charcoll#bom_byte_order_markBOM 是什么样子的。否则,检查https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored代表“黑钻石”。

如果是 BOM,请尝试让生成它的产品停止,以某种方式删除前 3 个字节。

答案2

我通过在 vi 中打开 sql 文件解决了这个问题

:set fileencoding=utf-8
:wq

答案3

它看起来像是编辑器添加的 BOM 或其他垃圾,你可以使用以下命令在文件中屏蔽它

echo -n --xx | dd conv=notrunc of=data.sql 

这只是用 SQL 注释覆盖字节,Mysql(或 Mariadb)将会忽略它。

相关内容