乱码原因:
编码的问题,MySQL中的表默认编码是latin1,而我的客户端及服务器采用的编码确是utf8,二者编码方式不一致导致的。
解决方法:将二者的编码方式都修改为UTF-8;
①修改jdbc连接的URL
比如在jdbc:mysql://localhost:3306/mybatis?useSSL=false加上&useUnicode=true&characterEncoding=UTF-8;
&useUnicode=true&characterEncoding=UTF-8的作用为与localhost上3306端口上的名为mybatis库进行数据传输采用UTF-8的编码方式;
这也说明客户端采用的是UTF-8的编码方式。
②修改MySQL表中的编码方式
首先查看一下出现乱码的那个表的编码方式,使用show create table 表名;_
mysql> show create table COLUMNS_V2;
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| COLUMNS_V2 | CREATE TABLE `COLUMNS_V2` (
`CD_ID` bigint(20) NOT NULL,
`COMMENT` mediumtext CHARACTER SET utf8,
`COLUMN_NAME` varchar(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`TYPE_NAME` mediumtext,
`INTEGER_IDX` int(11) NOT NULL,
PRIMARY KEY (`CD_ID`,`COLUMN_NAME`),
KEY `COLUMNS_V2_N49` (`CD_ID`),
CONSTRAINT `COLUMNS_V2_FK1` FOREIGN KEY (`CD_ID`) REFERENCES `CDS` (`CD_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
从上面可以看出,COLUMNS_V2表中的COMMENT字段的编码方式为utf-8,而COLUMN_NAME字段的编码方式为latin1_bin。如果使用步骤①的jdbc连接对字段COLUMN_NAME进行操作的话,必定会发生乱码,因此修改字段COLUMN_NAME的编码方式。
使用alter table `表名` modify column `列名` `列的类型` character set utf8;
mysql> alter table COLUMNS_V2 modify column COLUMN_NAME varchar(767) character set utf8;
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0
将MySQL的编码方式和客户端的编码方式修改成一致,乱码解决。