MySQL字符集问题解决方法(包括改配置文件、命令行修改和JDBC的问题)

原创 2005年02月25日 19:29:00
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| 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 | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

上面列出的值就是系统的默认值。

一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

SET NAMES 'utf8';

它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

而MySQL数据库的4.1是一个分水岭,4.1直接支持Unicode,它以下版本支持的不好;

MySQL JDBC Driver的3.0.16也是一个分水岭,3.0.16版本会取数据库本身的编码,然后按照该编码转换,这种方式和Oracle的JDBC Driver是一样的。例如你的数据库是GBK编码的话,JDBC Driver就会把数据库里面的取出来的字符串按照GBK往unicode转换,送给JVM。因此正确的设置数据库本身的编码就尤为重要。

MySQL JDBC Driver3.0.16以下的版本则不然,它不会那么智能的根据数据库编码来确定如何转换,它总是默认使用ISO8859-1,因此你必须使用 characterEncoding=GBK来强制他把数据库中取出来的字符串按照GBK来往unicode转换。

因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:

1) 正确的设定数据库编码,MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)

2) 使用3.0.16以上版本的JDBC Driver,那么你就不需要再写什么characterEncoding=UTF-8

相关文章推荐

JSP连接MYSQL5的中文问题解决方法

  • 2011年11月06日 10:09
  • 246KB
  • 下载

中文乱码--MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总

MySQL5.0中文问题解决方案如下:    1、在dos环境下,用mysql --default-character-set=gbk -hlocalhost-u root -p 这句话进入mysql...

MySql乱码问题解决方法

  • 2014年03月05日 14:23
  • 6KB
  • 下载

mysql免安装配置教程及遇到1067服务启动不成功的问题解决方法

mysql免安装配置简洁教程及遇到问题的解决方法
  • Yonk_Z
  • Yonk_Z
  • 2016年05月31日 17:50
  • 2417

64位win7手动搭建php开发环境Apache+MySQL+php及相关配置,问题解决方法

本身是计算机专业学生,然而学业未精,毕业设计时基本什么语言都还不熟练,最后想做个小网站吧,选来选去决定用php来做,工作之后也就顺势找了php相关的职位。 当时决定用php时就在开发环境配置上卡了将近...

MYSQL命令行查询中文乱码问题解决方案

会出现中文乱码的原因可能有以下几点原因: (1)server问题 (2)table语系问题 (3)客户端问题 解决方案: (1)找到安装mysql时的目录下my.ini文件,用记事本将其打开...

mysql-bin日志文件过大导致磁盘空间不足问题解决方法

在MySQL数据库中,mysql-bin.000001、mysql- bin.000002等文件是数据库的操作日志,例如UPDATE一个表,或者DELETE一些数据,即使该语句没有匹配的数据,这个命令...

MySQL命令行乱码问题解决

mysql的客户端根本无法以utf-8的形式返回数据。windows下命令行的默认属性为GBK。...

mysql与JDBC中文问题的解决方法

  • 2012年05月31日 13:16
  • 13KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL字符集问题解决方法(包括改配置文件、命令行修改和JDBC的问题)
举报原因:
原因补充:

(最多只允许输入30个字)