日期:2014-05-16  浏览次数:20744 次

mysql 中文乱码 完全版解决办法
       mysql是一小型数据库,各方面都讲究轻量级的实现。关于编码问题也是如此,只要搞清楚几个关键概念,便能轻轻松松的解决这个问题。在网上以搜索相关的主题是各种解法汇集,但是都没能清楚的说明解决问题的关键所在。看如下:
      在进行mysql安装的时候会有一个选择mysql默认编码的机会,他默认的方式是latin1的编码方式.在这个地方应该选择我们想要的编码方式,当然了主推utf-8,这是最通用的编码方式,在一个J2EE系统中可以从后台数据库,服务器,以及前台页面的编码方式都可以用这一个种编码,能够很好的解决因为编码给我带来的麻烦。我们在此处设置了utf-8之后其实对应的是Mysql目录下面的my.ini文件下面的有两个 default-character-set=latin1 的设置都会变成default-character-set=utf8.之后我们在使用sql语句创建数据的时候,只需要将创建的数据库指定为utf-8格式就基本上能解决绝大部分的编码问题,至于设置数据库编码的方式是:
创建时:
      create database student character set utf8;
创建后修改:
      alter database student character set utf8;

如果我们在安装mysql的时候未能指定为utf8格式的,可以修改my.ini文件下面的有
[mysql]

default-character-set=latin1
.
.
# created and no character set is defined
default-character-set=latin1

将他们修改成utf8,关于这里我原来的笔记上面说的是一个是上面的一个需要改成gbk,下面的一个改成utf8,但是感觉有些不妥,我前段时间在安装mysql选定了Utf8,我倒这个文件里面来看这两个地方都是utf8,所以你可以试一下。


现在来看最核心的概念:

   mysql中有character set(字符集)和collation(整理或比较字符的规则的集合)两种概念,
   服务器端有:
         character_set_server:服务器
         collation_server
          
         character_set_database 数据库 (在create database 设置的,如上)
         collation_database
   
   客户端:
         character_set_client:客户端发送过来的字符集
         character_set_results:发送给客户端的结果所使用的字符集
 
    连接:
         character_set_connection:用于连接的字符集
         collation_connection:用于连接的collation

其中的character_set_client.character_set_results,和character_set_connection这三个就是根据My.ini配置文件里面的default_character_set来设置的,也可以在控制台下用set names utf8来进行修改,但是可能只是暂时的吧。没有试过。
有时候情况还是有些特殊,即使上面的招式全用了也没有效果,还有可能是连接字符串的问题,在连接字符串的时候可以写成如下,我这个是在用hibernate的时候写的,不知道jdbc下面是否可以直接用:
    jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=utf-8


我们在创建数据库的时候可以如上那样写,可以用更加完整的方式:

create database student
    character set utf8
    default character set utf8        
    collate utf8_general_ci
    default_collate utf8_general_ci;

其中有一些设置是多余的。

有了这些基本上mysql的问题都能迎刃而解了,如果还是不行,那就自求多福了。多试试,凡事都是有规律的,掌握了就一切都不是问题!