读取MYSQL中中文数据 乱码问题,请教大家

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
huayolia
帖子: 54
注册时间: 2009-09-22 16:15

读取MYSQL中中文数据 乱码问题,请教大家

#1

帖子 huayolia » 2010-01-16 16:58

最近,我安装了apache2+php5+mysql5
刚刚建立好。。准备做查询和搜索数据库的操作,结果发现 在mysql中无论选择何种字体,现实出来依然是乱码。
我查了论坛中这篇文章 完整照做

11.1 mysql乱码的问题
1.在终端输入命令 sudo gedit /etc/mysql/my.cnf在打开的文件中
找到[client]在下面加入
default-character-set=utf8
找到 [mysqld_safe]在下面加入
default-character-set=utf8
找到[mysqld]在下面加入
default-character-set=utf8
init_connect='SET NAMES utf8'
找到[mysql]在下面加入
default-character-set=utf8

2.(为了安全起见这一步最好执行)在终端输入命令 mysql -u root -p
提示你输入密码: 你的root用户的密码
进入到mysql输入命令set names utf8 //这里只可以是utf8不可以是utf-8,因为linux下的mysql不认识utf-8。

3.重启mysql命令以便让你上面的修改生效
sudo /etc/init.d/mysql restart

4.检查mysql字符集
命令 一:show variables like 'character%'; 出现
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

命令二:show variables like "collation_%"; 出现
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+

可是,我做了测试,结果依然是乱码。
注: 做完设置,我在mysql> 下输入‘命令1’ ‘命令2’结果和上述完全一样。。

请教一下大家,我应该如何处理这个问题 :em20
头像
link_01
帖子: 1024
注册时间: 2008-11-05 13:24

Re: 读取MYSQL中中文数据 乱码问题,请教大家

#2

帖子 link_01 » 2010-01-16 17:41

我的资料里有解决办法,只需要client和mysqld的配置段设置
[ client ]
default-character-set=utf8
[ mysqld ]
default-character-set=utf8
skip-character-set-client-handshake
在mysql中默认字符集是latin1,
想要设置字符集为uft-8,可以在 my.cnf 文件中添加以下设置:
·[client]
default-character-set=utf8
·[mysqld]
default-character-set=utf8
skip-character-set-client-handshake #此处是忽略客户端的字符集,使用服务器的设置
(skip语句和client中的default选一个)
当然你可以在建立数据库是规定字符集:
create database db_name default character set utf8 callate utf8-general-ci;
也可以在链接数据库前设置:set names 'utf8';

另外,你的系统环境是什么编码,有没有新建数据库和表试试?
笔记
-------------------------------------
http://blog.163.com/wqt_1101
huayolia
帖子: 54
注册时间: 2009-09-22 16:15

Re: 读取MYSQL中中文数据 乱码问题,请教大家

#3

帖子 huayolia » 2010-01-16 20:37

link_01 写了:我的资料里有解决办法,只需要client和mysqld的配置段设置
[ client ]
default-character-set=utf8
[ mysqld ]
default-character-set=utf8
skip-character-set-client-handshake
在mysql中默认字符集是latin1,
想要设置字符集为uft-8,可以在 my.cnf 文件中添加以下设置:
·[client]
default-character-set=utf8
·[mysqld]
default-character-set=utf8
skip-character-set-client-handshake #此处是忽略客户端的字符集,使用服务器的设置
(skip语句和client中的default选一个)
当然你可以在建立数据库是规定字符集:
create database db_name default character set utf8 callate utf8-general-ci;
也可以在链接数据库前设置:set names 'utf8';

另外,你的系统环境是什么编码,有没有新建数据库和表试试?
我的环境是在ubuntu9。1中,建立apache2+php5+mysql5的。
最开始的时候,我自己做的PHP页面也是无法正常显示中文。后来,我加了这句话,就可以了
<meta http-equiv=Content-Type content="text/html;charset=utf8">
mysql里,我做的小数据库测试,使用的都是utf8_general_ci。另外,根据您上面的提示,我也已经在my.cnf中加入了这些语句了。

不过,您说的。
“当然你可以在建立数据库是规定字符集:
create database db_name default character set utf8 callate utf8-general-ci;
也可以在链接数据库前设置:set names 'utf8';”

是在哪里设置输入阿。。我新建数据库,是采用phpmyadmin的图形界面的。我是在新建数据库,数据表和字段的时候,选择utf8_general_ci 不知道效果和您说的是否一样~~

请帮我把个关,谢谢~~
huayolia
帖子: 54
注册时间: 2009-09-22 16:15

Re: 读取MYSQL中中文数据 乱码问题,请教大家

#4

帖子 huayolia » 2010-01-16 20:59

另外,补充问一下。。我发现,导入(import database)数据库的时候,有这么个限制(Max: 2,048 KiB)
不知道去除的方法是啥。。另外,最大可以支持多少阿 :em03
头像
xieshaohu
帖子: 1565
注册时间: 2007-10-24 20:20
来自: 北京、海淀
联系:

Re: 读取MYSQL中中文数据 乱码问题,请教大家

#5

帖子 xieshaohu » 2010-01-16 23:58

http://dev.mysql.com/doc/refman/5.1/zh/ ... ysqlimport
官方文档并没有显示import命令有大小限制,建议你再看看数据库的其他默认设置。
Dell Vostro 1500, T7300/4GB/WD5000BEVT/nVidia 8400GM, Ubuntu 10.04 x86_64/VMware 7(Win7)
我的博客:http://xieshaohu.wordpress.com/
sxgkwei
帖子: 82
注册时间: 2007-10-08 16:45

Re: 读取MYSQL中中文数据 乱码问题,请教大家

#6

帖子 sxgkwei » 2010-01-17 10:07

方法1:
建立数据库到时候就建立成支持UTF-8的:
create database db_name default character set utf8;

方法2:
已经建立了库拉,也可以更改库的字符集,改成支持UTF-8的格式:
....(语句忘记拉,不过的确可以这么做)。
此方法对库中已经存在到记录无效,也就是说,之前你到数据库不支持UFT-8,你却把中文已经存进去拉,那里面之前存进去的就是乱码,此时就算你把支持改成UTF-8,里面到记录也依旧是乱码不会改变了。只对更改以后加入到数据有效。

从库中要取出中文到方法(用JAVA做例子):
url为:
jdbc:mysql://127.0.0.1:3306/db_name?useUnicode=true&characterEncoding=utf8
就算数据库支持utf8了,但是并不代表你能够从普通的链接里取到中文,此时必须建立一条支持utf8的链接。

同时,如果从web页面显示的话,必须在servlet里的输入和输出里做相应到更改,servlet默认输入输入/输出字符集为 iso-8859-1,此字符集不支持中文:
service方法内:
request.setChaeracterEncoding("utf-8");
输入设置为utf8,不然就算到数据库到链接是utf8,取出了中文,但是输入到servlet里面,这个servlet会把utf8的输入当作iso-8859-1理解,最后造成乱码。
response.setContentType("text/html;setchar=utf-8");
输出设置为utf8,不然过程中都按照中文处理,最后输出到web页面时却按照iso-8859-1输出,web页面就乱码。
huayolia
帖子: 54
注册时间: 2009-09-22 16:15

Re: 读取MYSQL中中文数据 乱码问题,请教大家

#7

帖子 huayolia » 2010-01-17 14:47

en
谢谢大虾们
我已经设置好了。。大小限制也改过来了
可以把语句写在PHP页面里。。当然,上述的配置也是需要的 :em09
回复