我有一个MySQL源(插入),我在Debían启动后申请。
该文件位于UTF8
,在bash脚本中,我启动MySQL服务并使用命令source path/to/file.sql
向UTF8 table
创建一个EOF(heredoc)(显示创建表说)
但是当我连接到服务器检查数据时,它显示的是波形字符作为奇怪的字符。所以我把set names "latin1"
放得正确。
但是,如果我跳过脚本并手动连接,然后输出sql,它会插入字符OK。
所以问题出现在脚本连接中,但是如果我在脚本中执行相同的命令但手动连接,它与插入的不同之处。
非常感谢任何帮助。
答案 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不支持作为连接字符集。