为什么mysql 4不尊重--character_set_results和--default-character-set命令参数?

时间:2011-06-28 09:31:20

标签: mysql unicode utf-8

我有一个表'ABC'(charset = utf8),这些是我的字符集变量值
 [mysql version 4.1.23 - Server]和Client version - 3.23.57


mysql> show variables like 'character%';
+--------------------------+------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /home/y/share/mysql/charsets/ | +--------------------------+------------------------------------+ 7 rows in set (0.00 sec)

现在,如果我在mysql客户端中运行查询

mysql>select * into outfile '/tmp/a' from ABC;
Query OK, 26 rows affected (0.00 sec)

并检查/ tmp / a

的文件类型
[satyavrk-~]$: file /tmp/a
/tmp/a:UTF-8 Unicode text

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-~]$: file 63794
63794: ISO-8859 English text, with very long lines

Q2)由于我将--default-character-set指定为UTF-8,因此结果集应为utf8。但事实并非如此!为什么?

在这两种情况下,文件类型都与预期的

不同

任何人都可以解释我错过的观点

2 个答案:

答案 0 :(得分:0)

SET NAMES很方便,可能正是您所需要的。

答案 1 :(得分:0)

我猜问题是mysql客户端。如果我尝试使用版本4的mysql客户端。第二个问题解决了!

在dev.mysql.com/doc/refman/5.0/en/select.html上提供的文档中说“SELECT ... INTO OUTFILE是LOAD DATA INFILE的补充。使用二进制字符集转储列值实际上,没有字符集转换。如果一个表包含多个字符集中的列,那么输出数据文件也是如此,你可能无法正确地重新加载文件。“这意味着它不会读取character_set_results。