我有一个表'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。但事实并非如此!为什么?
在这两种情况下,文件类型都与预期的
不同任何人都可以解释我错过的观点
答案 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。