Mac os mysql数据库中文乱码解决

Mac os mysql数据库中文乱码解决

问题描述:

在使用jdbc、mybatis等框架时,往数据库插入数据后,用Navicat等工具查看发现,原来的中文变成了乱码。

1. 问题如下
        sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactoryInstance();
        userInfo = new UserInfo();
        userInfo.setUid(UUID.randomUUID().toString());
        userInfo.setUsername("dada's mt");
        userInfo.setPassword("12345678");
        userInfo.setSex(0);
        userInfo.setNickname("哒哒");
        userInfo.setEmail("[email protected]");
        userInfo.setBirthday(new Date());
        userInfo.setType(0);

userInfo.setNickname(“哒哒”);这里设置的中文字符,数据软件查看却是??
在这里插入图片描述

2. 原因:

使用如下语句,查询数据库编码
show variables like ‘%char%’;
可以看到如下结果:
character_set_server 是latin1而不是utf8
在这里插入图片描述

3. 解决:

  • 1)数据库连接url加上characterEncoding=UTF-8,如:url: jdbc:mysql://127.0.0.1:3306/spring_boot?useUnicode=true&amp&characterEncoding=UTF-8
  • 2)修改配置文件,找到一份mysql的配置文件(一般在/usr/local/mysql/support-files/目录下,新版的mysql可能没有了),命名为my.cnf,放到/etc下, 在文件标签[mysqld]下加上character-set-server=utf8 如下:
    注意:my.cnf不要赋777权限,my.cnf是wirtale的话会被mysql忽略(755是可以的)
[client]
default-character-set=utf8
port        = 3306
socket      = /tmp/mysql.sock
[mysqld]
default-storage-engine=INNODB
#设置mysql server编码为utf8
character-set-server=utf8
collation-server=utf8_general_ci
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
server-id   = 1
pid-file = /usr/local/mysql/data/mysql.pid
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout

重启mysql服务,执行show variables like ‘%char%’,如下:
在这里插入图片描述

发布了17 篇原创文章 · 获赞 9 · 访问量 6527

猜你喜欢

转载自blog.csdn.net/liuyanglglg/article/details/84782180