`
kankan1218
  • 浏览: 272093 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics