您的位置:首页 > 数据库 > MySQL

MyBatis操作MySQL中文乱码问题

2015-10-10 14:07 507 查看
今天在进行mysql操作的时候,遇到了下面的错误:

java.sql.SQLException: Incorrect stringvalue: '\xE5\xBC\xA0\xE4\xB8\x89...' for column 'Ub_name' at row 1

       有句话叫, 百度一下,你就知道,于是我去百度,晓得了是乱码问题。当我按照上面搜索出来的,发现都是七七八八的,再结合自己用大脚拇指想了想,整理如下:

1、  mysql服务器字符集问题

2、  数据传输字符问题

3、  客户端编码问题

我这边有2个mysql,一个是本地的,一个是远程的。本地版本是5.5.28,远程版本是5.1.73

于是,我先更改了properties,如下:

connection.mysql.url=jdbc:mysql://localhost:3306/bberdb?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

然后再运行程序,发现本地数据库保存进去的依然是乱码,于是去mysql看创建表的语句,发现在创建表的时候指定的字符集,于是,删除该表。并重写create table语句,指定其字符集是utf8。

       本以为这下可以了,但是发现错误依旧。看到要动用终极钛晶枪了。本地的mysql是windows版本的,于是找到my.ini。更改了2个地方:

[mysql]

default-character-set=utf8

 

[mysqld]

 

character-set-server=utf8

       再运行程序,发现可以保持中文了:



然后将properties里面的切换connection.mysql.url到远程服务器,发现还是报这个错,于是我先手动写了一个insert,发现保存进去是乱码,有了前面的经验,先改的就是my.cnf(远程服务器是liunx)。在[mysqld]下面增加了:

Character-set-server=utf8

    运行程序,还是报错,跑到my.cnf里面看,没有[client],于是增加了下面的代码:

[client]

Default-character-set=utf8

发现还是报错,这就让我不乐意了,于是继续百度,看到一个帖子说要增加init_connect=’SET NAMES utf8’,于是我也增加了。运行程序还是报错,于是我就暴怒了,查看了表的建表语句,发现建表语句指定了其他字符集,如下:

CREATE TABLE `buyerUser` (

 `U_buyer` int(11) NOT NULL AUTO_INCREMENT,

 `Ub_poptype` int(11) DEFAULT NULL,

 `Ub_popularrize` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

 `Ub_ctime` datetime DEFAULT NULL,

 `Ub_name` varchar(200) CHARACTER SET latin1 DEFAULT NULL,

 `Ub_phone` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

 `Ub_password` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

 `Ub_headm` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

 `Ub_headbig` varchar(20) CHARACTER SET latin1 DEFAULT NULL,

 `Ub_sex` tinyint(1) NOT NULL,

 `Fb_sex` tinyint(1) NOT NULL,

 `Ub_money` double(15,3) DEFAULT NULL,

 `Ub_state` tinyint(4) DEFAULT NULL,

 `Ub_kade` tinyint(1) DEFAULT NULL,

 `Ub_key` int(11) DEFAULT NULL,

 `Ub_updatetime` datetime DEFAULT NULL,

 PRIMARY KEY (`U_buyer`)

) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULTCHARSET=utf8 PACK_KEYS=0 CHECKSUM=1;

 

       害人呐,更改了Ub_name后面的CHARACTER SET为utf8,然后再运行程序就可以存储汉字了。

Lunix最后的配置文件如下:



    如果是用的eclipse的项目,使用tomcat的话,还要注意一下就是tomcat的servet.xml要看下指定的编码集合:

 <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" />

可以在这里里面增加下面的编码: URIEncoding="UTF-8" 


【总结】

      有时候通过Navicat操作不靠谱,还是要sql语句操作好点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis 操作 mysql 乱码