六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 199|回复: 0

MySQL5.x处理中文全解

[复制链接]

升级  21.33%

22

主题

22

主题

22

主题

秀才

Rank: 2

积分
82
 楼主| 发表于 2013-1-29 16:22:29 | 显示全部楼层 |阅读模式
我这边用 Java 连接 MySQL 数据库,通过 JDBC 写入数据。在 Java 中直接生成的中文字符串,写入数据库变成半角问号“?”。以下是我解决此问题的记录。

首先,我用 Putty 这个工具连接 MySQL 以检查中文写入情况。这里有一个设置。此设置如果不对,则会导致乱码。


然后,MySQL 提供了关于字符集的很多变量。可以通过 MySQL 命令来查看。
输入命令:mysql> SHOW  VARIABLES  LIKE  '%char%'; 
会看到如下内容:

相信大家这些变量不全是 utf8 吧?比如有的是 'utf-8' ,有的是 'latin1' 一类的?全部都改成 'utf8' 才能保持一致,不出现乱码。
设置变量语句格式:mysql> SET  character_set_server='utf8';   将变量名一个个修改成值非 utf8 的那些,逐句执行就行。
另外除非全部系统 + 所有用户都是纯微软环境,否则不要使用微软推广的 GBK 字符集,不通用。

接下来解释一下,为什么不能用 UTF-8 、utf-8 一类的名称,必须用 utf8 。大家可以看到 character_sets_dir 这个特变量。到其指定的目录中看一下,就会发现很多字符集文件。其中 Index.xml 是一个字符集名称的索引文件,里边有这么一段:

咱们就是得让指定的字符集名称和这里设定的 charset name 保持一致。这里写为 utf8 ,所以咱们的变量都得设为 utf8 。

通过命令设置的变量,在重启之后会恢复原设置。所以我们可以考虑通过 my.cnf 文件来直接配置 MySQL 的这些变量。
在改动配置文件之前,肯定要做文件整个的备份。这个文件不能乱改,我试验的结果,应该在 [client] 里边添加 default-character-set=utf8 ,在 [mysqld] 里边添加 character_set_server=utf8 ,然后保证最下边 [mysql] 里边存在一个 default-character-set=utf8 。进行这种设定之后重启 mysqld ,就不用每次开启 MySQL 重新设定这些变量了。

---------- ---------- ---------- ----------

数据库解决完了,接下来就是 Java 连接数据库的问题了。
JDBC 连接时,需要提供连接的 URL 。对于 MySQL 来说,这个连接应该设定几个参数:useUnicode=true&characterEncoding=UTF-8 。这个写法要严格一致,绝不能有偏差,比如把 UTF-8 写成 utf8 则会造成功能失常。如果没有别的连接参数,就用 ? 引导这二个参数,否则用 & 引导。

当然了,Java 里边的数据本身不能内容就是乱码。这个是另外的事情。只要保证 Java 运行时,监测变量的值本身不是乱码,就可以保证读写数据库不再是乱码了。


本文也发表在我于 CSDN 的日志: http://blog.csdn.net/shanelooli/article/details/7900276
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表