为啥 mysql 4 不尊重 --character_set_results 和 --default-character-set 命令参数?
Posted
技术标签:
【中文标题】为啥 mysql 4 不尊重 --character_set_results 和 --default-character-set 命令参数?【英文标题】:Why is mysql 4 not respecting --character_set_results and --default-character-set command arguments?为什么 mysql 4 不尊重 --character_set_results 和 --default-character-set 命令参数? 【发布时间】:2011-09-24 04:00:02 【问题描述】:我有一个表 'ABC' (charset = utf8),这些是我的字符集变量值 [mysql 版本 4.1.23 - 服务器] 和客户端版本 - 3.23.57
mysql> 显示像 'character%' 这样的变量; +--------------------------+---------- --------------+ |变量名 |价值 | +--------------------------+---------- --------------+ | character_set_client |拉丁语1 | |字符集连接 |拉丁语1 | |字符集数据库 |拉丁语1 | |字符集结果 |拉丁语1 | | character_set_server |拉丁语1 | |字符集系统 | utf8 | |字符集目录 | /home/y/share/mysql/charsets/ | +--------------------------+---------- --------------+ 一组 7 行(0.00 秒)现在如果我在 mysql 客户端中运行查询
mysql>select * into outfile '/tmp/a' from ABC; 查询正常,26 行受影响(0.00 秒)并检查 /tmp/a 的文件类型
[satyavrk-~]$: 文件 /tmp/a /tmp/a:UTF-8 Unicode 文本Q1)由于我的 character_set_results 是 latin1 ,那么 /tmp/a 的文件类型是 UTF-8 而不是 latin1 或 ISO-8859 英文文本?
如果我运行,也可以选择
[satyavrk-~]$: mysqldump -uroot --databases my --tables ABC --default-character-set=utf8 > 63794然后做
[satyavrk-~]$: 文件 63794 63794:ISO-8859 英文文本,行很长Q2)由于我将 --default-character-set 指定为 UTF-8,结果集应该是 utf8。但事实并非如此!为什么?
在这两种情况下,文件类型都与预期不同
谁能解释我遗漏的点
【问题讨论】:
【参考方案1】:我猜是mysql客户端的问题。如果我尝试对版本 4 的 mysql 客户端做同样的事情。第二个问题解决了!
在 dev.mysql.com/doc/refman/5.0/en/select.html 提供的文档中说“SELECT ... INTO OUTFILE 是 LOAD DATA INFILE 的补充。列值使用二进制字符集转储. 实际上,没有字符集转换。如果一个表包含多个字符集的列,则输出数据文件也会如此,您可能无法正确重新加载文件。这意味着它不会读取 character_set_results。
【讨论】:
【参考方案2】:SET NAMES
很方便,可能正是您所需要的。
【讨论】:
以上是关于为啥 mysql 4 不尊重 --character_set_results 和 --default-character-set 命令参数?的主要内容,如果未能解决你的问题,请参考以下文章