从脚本和源文件插入表时编码错误

时间:2014-02-05 11:54:01

标签: mysql sql bash character-encoding

我有一个MySQL源(插入),我在Debían启动后申请。

该文件位于UTF8,在bash脚本中,我启动MySQL服务并使用命令source path/to/file.sqlUTF8 table创建一个EOF(heredoc)(显示创建表说)

但是当我连接到服务器检查数据时,它显示的是波形字符作为奇怪的字符。所以我把set names "latin1"放得正确。

但是,如果我跳过脚本并手动连接,然后输出sql,它会插入字符OK。

所以问题出现在脚本连接中,但是如果我在脚本中执行相同的命令但手动连接,它与插入的不同之处。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

原来,用户在启动后插入不是交互式的,它没有设置LANG变量,所以又回到了默认latin1

一种解决方案是在所有sql文件之上设置SET NAMES 'utf8'

另一种是在系统中设置LANG变量。

这是手册:

  

MySQL客户端程序mysql,mysqladmin,mysqlcheck,mysqlimport,   和mysqlshow确定要使用的默认字符集如下:

     

在没有其他信息的情况下,程序使用编译的默认字符集,通常是latin1。

     

程序可以根据操作系统设置自动检测要使用的字符集,例如LANG或LC_ALL的值   Unix系统上的语言环境变量或代码页设置   在Windows系统上。适用于可从中获取区域设置的系统   操作系统,客户端使用它来设置默认字符集   而不是使用编译的默认值。例如,将LANG设置为   ru_RU.KOI8-R导致使用koi8r字符集。因此,用户   可以在其环境中配置语言环境以供MySQL使用   客户端。

     

如果没有完全匹配,则OS字符集将映射到最接近的MySQL字符集。如果客户端不支持   匹配字符集,它使用编译的默认值。例如,   ucs2不支持作为连接字符集。