MariaDB社区

标题: 问一个关于character set的问题[已解决] [打印本页]

作者: aureliano    时间: 2009-9-2 16:37
标题: 问一个关于character set的问题[已解决]
本帖最后由 aureliano 于 2009-9-3 16:21 编辑

很窘很窘
机器上有一个lantin1的mysql
当时懒得重新编译,就直接把一个utf8的databaseA导进去了,想也不会有啥问题,后来又自己建了一个utf8的databaseB,两个database中都有table包含中文的column
现在问题来了:
进入任何一个database, 输入SHOW VARIABLES LIKE 'char%';
都会显示:
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
--------------------------------------------------------------------------
但是在databaseA中,查询有中文的column,会出现???,如果是用INTO OUTFILE保存到文件中,则可正常显示。
在databaseB中,查询有中文的column,正常显示,但是用INTO OUTFILE保存到文件中,则是乱码。

如果使用SET NAMES 'utf8'
对databaseA的查询显示问题消除,保存的文件也正常,但databaseB的显示也是乱码,保存到文件还是乱码。

请问这是怎么造成的?要怎么修改才能正常保存databaseB中的中文column到文件?
用SHOW CREATE DATABASE和SHOW CREATE TABLE去看databaseB及其中的table,都显示CHARSET utf8,和databaseA一样,那么这种查询结果的差异是怎么造成的呢?
作者: kider    时间: 2009-9-2 19:38
MySQL由3个地方来控制字符集,服务器端、客户端、连接。只有在这3个都一致的情况下,是最好的(有的字符集大有的字符集小)。导出数据,导入数据时需保持一致,那么就不会有问题了,而set names 'xxx',就是让其保持一致的方法之一。
你这里应该在导入、导出时保持一致,同数据库的设置保持一致,连接查看时也应该保持一致...

另外在论坛中搜索标签:乱码  也可以看到很多有用的帖子
作者: aureliano    时间: 2009-9-3 10:36
2# kider
好的,谢谢
作者: aureliano    时间: 2009-9-3 16:20
哈哈,我找到解决办法了

原来select .. into outfile 是储存在server上的办法
如果在shell里用mysql <batch_source> output就可以得到正常显示的文件了
作者: aureliano    时间: 2009-9-3 16:48
4# aureliano

窘窘窘。
居然不是这样的。
输出的row较少的时候没问题
整表输出就是乱码
这都行。。。




欢迎光临 MariaDB社区 (http://123.56.88.72/) Powered by Discuz! X3.2