mysql乱码解决方案

来源:互联网 发布:手机同声翻译软件 编辑:程序博客网 时间:2024/05/24 02:11

工作用的都是Oracle数据库,闲来无聊,自己电脑安装Mysql玩玩。话说,初次用mysql难度不小,乱码是最头疼的问题:

1乱码问题根源

MySQL 4.1及以后的版本开始支持多语言,这个所谓的多语言,就是在输入输出时MySQL会替你做编码转换。而这个转换规则就是由客户端编码和服务器端编码来决定的。

 

编码转换的规则就是:在输入数据时将编码由“客户端编码”转换为“服务器端编码”,输出时将数据由“服务器端编码”转换为“客户端编码”。

 

mysql> show variables like"%char%";

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | latin1                     |

| character_set_connection | latin1                     |

| character_set_database   | latin1                     |

| character_set_filesystem | binary                     |

| character_set_results    | latin1                     |

| character_set_server     | latin1                     |

| character_set_system     | utf8                       |

| character_sets_dir       | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

 

字段含义:

character_set_client     客户端字符集

character_set_connection   客户端与服务器端连接采用的字符集

character_set_results     SELECT查询返回数据的字符集

character_set_database    数据库采用的字符集

 

所以解决问题的思路就是:让服务器端和客户端的字符集保持一致。


2客户端编码格式

可以使用setnames utf8;设置当前session的默认编码格式。执行这一命令相当于执行了:

SETcharacter_set_client='utf8';
SET character_set_connection='utf8';

SET character_set_results='utf8';

 

也可以在网页或PHP代码中加上一个"setnames utf8"指令,告诉MySQL连线内容都要使用utf8。然后再执行其他SQL

 

如果想要修改客户端的默认编码格式,见后面对/etc/my.cnf的修改。

changjian  

Java连接也该设置上编码方式:

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

注意:还有一点是我遇到的问题,现在我说一下:

本人上面方法全部适合,都是utf-8,在数据库执行insert不会乱码,java插入执行SQL不会乱码,但是数据到数据库中就会乱码。经查证,是mysql驱动jar版本过低,换一个高版本的就行了。

0 0