为啥 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 命令参数?的主要内容,如果未能解决你的问题,请参考以下文章

输入为啥不尊重flex?

查看不尊重约束,这是为啥呢?

为啥 QPushButton 不尊重绝对像素大小?

为啥我的 gen_server 不尊重模式匹配?

为啥 IE 不尊重具有流体图像子项的表格宽度

为啥 Chrome 不尊重我的内容安全政策哈希?