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&&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%’,如下: