MySql 乱码的困惑和解决办法

MySql 乱码的困惑和解决方法

                       

遇到乱码问题很久了,一直不知道怎么解决,看了网上有很多这方面的文章,看完后似乎帮助也不大,还是一直悬而未决。

今天终于痛下决心,一定要解决一下。

首先在mysqlcc中查看了一下数据库中创建的表的collation是utf8_general_ci

数据库连接字符串已经加上了useUnicode=true&characterEncoding=UTF-8

jsp的头部已经加上charset=UTF-8

但是从数据库中读出的数据仍然是乱码。

于是使用cmd连上mysql,insert和select中文都是正常的。

突然怀疑是不是数据库创建的根本就不是utf8的。于是做了个试验

首先 set NAMES utf8。然后再从表中select数据,发觉数据居然是乱码。

既然数据库有问题,那么就重新建一个utf8的试试。使用下面的命令

CREATE DATABASE db1

    DEFAULT CHARACTER SET utf8

    DEFAULT COLLATE utf8_general_ci;

use db1;

set NAMES utf8;

重新insert和select中文,却发觉仍然是乱码。实在无法理解。。。。

抱着试试的心理,把NAMES设成了gb2312(set NAMES gb2312;)

居然insert和select中文都是成功的。

set NAMES gb2312下初始话了一下数据库的数据,

启动tomcat,java程序不需要任何修改也再没有乱码的问题了。

至此mysql的乱码问题莫名其妙地得到了解决,但是为什么设置仍然要设成gb2312还是无法理解。

想起一个问题,给日本人做项目的时候,用的是oracle数据库,初始话的sql也是shift-jis的。难道这个地方要设成和本机系统一致的编码?

后来把这个系统移到公司的电脑上跑了一下,居然仍是乱码。考虑到公司电脑的语言选项的高级设置是日语。我创建了一张test表

CREATE TABLE TEST (NAME VARCHAR(20));

然后在

set NAMES sjis

的基础上分别插入一条中文的记录和一条日语的记录,

select出来之后,中文的记录是乱码,日文的记录正常。

至此,初步得出要使用UTF8需要如下几步:

1 创建数据库的时候加上下面的选项: 

DEFAULT CHARACTER SET utf8

    DEFAULT COLLATE utf8_general_ci;

2
数据库连接字符串已经加上了useUnicode=true&characterEncoding=UTF-8

3 jsp的头部已经加上charset=UTF-8

4 通过sql语句直接insert select需要set NAMES [NAMES]

其中[NAMES]为本机的语言选项。中文系统[NAMES]选gb2312, 日文系统选sjis

MySql 乱码的困惑和解决办法

相关文章:

你感兴趣的文章:

标签云: