docker中mysql 汉字乱码,显示问号
1,插入数据后,显示情况如下:
2,排查问题:
分析:乱码一般为编码与解码不一致,通过断点可以断定,汉字入库前正常(idea编码为utf8)
则查看mysql的编码:
mysql编码分为:数据库编码,表编码
首先查看表编码:方便看,自己创建表的时候可以看到:
CREATE TABLE `BLOGTEXT`(
`blogId` varchar(20) not null COMMENT 'blogID',
`blogText` varchar(200) default null COMMENT 'blog内容',
PRIMARY KEY (`blogId`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
或者通过命令行:
mysql> show create table house.BLOG;
......
| BLOG | CREATE TABLE `BLOG` (
`blogId` varchar(20) NOT NULL COMMENT 'blogID',
`name` varchar(20) DEFAULT NULL COMMENT 'blog??',
`description` varchar(20) DEFAULT NULL COMMENT '??',
`category` int(2) DEFAULT NULL COMMENT '??',
`microContent` varchar(20) DEFAULT NULL COMMENT '????????',
`lastUpdate` datetime DEFAULT NULL COMMENT '???????',
`createTime` datetime DEFAULT NULL COMMENT '????',
PRIMARY KEY (`blogId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
查看数据库编码格式:
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/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
可以看到database的编码格式Latin1,这个也就是ISO-8859-1;
修改下编码格式:
怎么修改呢?
因为我这里是通过docker启动的,所以首先进入容器中:id为容器Id
docker exec -it id /bin/bash
执行下面语句:
apt-get update
apt-get install vim
但是:突然发现修改数据库连接就可以了,如下所示:
spring.datasource.url=jdbc:mysql://120.53.228.47:3306/house?serverTimezone=UTC&characterEncoding=UTF-8
修改的内容为后面新增了编码格式。
如果这里修改了数据库还乱骂,则需要继续上面的操作:
修改mysql的配置文件,修改编码格式:(mysql容器中的配置文件的位置:/etc/mysql/mysql.conf.d)
这张图片是摘下来的。
上面已经排查了项目,mysql的数据库,表,还未检查字段,如果还有问题,那么就应该检查字段啦。
查看数据库编码格式:
mysql> show variables like 'chara%';
查看数据库表的字符集:
mysql> show create table house.blog;//house为数据库名,blog为表名
修改数据库的编码格式:
mysql>alter database <数据库名> character set utf8;
修改数据库表编码格式:
mysql>alter table <表名> character set utf8;
我不是来改变世界的