MySQL解决中文乱码有关问题的通用方法的详细总结

MySQL解决中文乱码问题的通用方法的详细总结


一MySQL解决乱码问题步骤概括

1、所有请求都编码都统一用utf-8,

2、使用Filter过滤所有request和response都设成utf-8,

3、数据库character_set_database设置utf-8,

4、假如character_set_client还是默认的latin1,要在连接数据库时url后面加上转码:

jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=utf-8

或者

jdbc:mysql://localhost:3306/databasename?useUnicode=true&characterEncoding=utf-8

如果用的是hibernate

在<session-factory>和</ session-factory>之间加入这么一段:

代码:

        <property name=”connection.useUnicode”>true</property>

        <property name=”connection.characterEncoding”>utf-8</property>

5、对于用javascript传递中文参数,要对中文参数字段进行编码,解码

在发送页面要指定编码

例如: str = encodeURI(str); (encodeURI转码后为utf-8)

在接收页面要进行转码

例如: str = new String(str.getBytes(“iso-8859-1″),”utf-8”);


二MySQL解决乱码问题具体操作

1、修改数据库方法如下:

     ALTER DATABASE sample ####这里修改整个数据库的编码

       CHARACTER SET utf8

       DEFAULT CHARACTER SET utf8

       COLLATE utf8_general_ci

       DEFAULT COLLATE utf8_general_ci;

当然了,你也可在在建数据库的时候指定编码,比如:

   CREATE DATABASE sample

       CHARACTER SET utf8

       DEFAULT CHARACTER SET utf8

       COLLATE utf8_general_ci

       DEFAULT COLLATE utf8_general_ci ;

2、建表的语句

CREATE TABLE `mysqlcode` (

`id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,

`content` VARCHAR( 255 ) NOT NULL

) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

当然我们也可以通过如下指令修改数据库的字符集

    alter database da_name default character set ‘charset’.

3、接下来要做的是打开mysql所在的目录下的my.nin

[client]

port=3306

[mysql]

default-character-set=gbk

[mysqld]

default-character-set=utf8

#重要:这个设置决定MySQL的工作环境的字符集!数据库继承MySQL设置的字符集,而表则继承数据库的字符集,字段则继承表的字符集!所以这里设置很重要!

启动mysql,输入:

执行下列语句,可以查看结果:

mysql> SHOW VARIABLES LIKE ‘%character%’ ;

mysql> SHOW VARIABLES LIKE ‘%collation%’ ;

修改mysql 字符设置,可以采用下述配置(客户端以utf8格式发送 ):

SET character_set_client=’utf8′       客户端字符

SET character_set_connection=’utf8′

SET character_set_results=’utf8′

上面的三行配置就等价于 SET NAMES ‘utf8’。

现在用DOS命令 对刚才创建的数据库操作

mysql> use test;

Database changed

mysql> insert into mysqlcode values(null,’php爱好者’);

ERROR 1406 (22001): Data too long for column ‘content’ at row 1

没有指定字符集为gbk,插入时出错

前面插入下面一条语句就可以啦

mysql> set names ‘gbk’;

Query OK, 0 rows affected (0.02 sec)

mysql> insert into mysqlcode values(null,’php爱好者’);

Query OK, 1 row affected (0.00 sec)

制定字符集为gbk,插入成功

4、用到过滤器

有关filter设定的具体代码在文章末尾

然后在web.xml中配置filter(一定要配置在struts filter 之前)

<!– 解决中文乱码问题 –>

  <filter>

     <filter-name>encodingFilter</filter-name>

     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

     <init-param>

             <param-name>encoding</param-name>

             <param-value>GBK</param-value>

     </init-param>

 

MySQL解决中文乱码有关问题的通用方法的详细总结

相关文章:

你感兴趣的文章:

标签云: