MYSQL中文乱码以及character_set_database属性修改
1.数据库设置
新安装MYSQL,还没有修改数据库系统编码。
之后由于创建数据库时候:create database db_name; 没有指定编码,
之后发现乱码就修改各个属性之后还是乱码,便开始配置数据库属性,之后信息如下:
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
发现character_set_database该属性设置utf8之后依旧还是Latin1 ,其实这个属性是数据库属性,
在创建数据库时候如果不指定默认就是这个,因此对于创建的数据库可以修改数据库编码为utf8,修改脚本:
alter database <数据库名> character set utf8;
之后还是乱码,由于之前数据错误编码,所以设置utf8依旧乱码,删除数据重新导入即可。
因此为了避免此问题,以后安装数据库首要任务就是配置编码,创建数据库时候指定编码:
CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci;
2.数据库连接设置
jdbc:mysql://localhost:3306/test?characterEncoding=utf8
问题:
characterEncoding=utf8的意思是项目中的编码还是要转换成的mysql的编码?
比如项目(idea)是utf-8,mysql数据库test也是utf-8,这句话还有必要吗?
如果项目是(idea)gbk,mysql数据库test是utf-8,那么数据库连接写
characterEncoding=utf8 还是 characterEncoding=gbk呢?
回答:characterEncoding=utf8 告诉数据库此次连接传输UTF8数据,
项目为UTF8 数据库为其他编码,在持久化时会把项目UTF8的
数据转换为数据库存储的格式;从数据库取数据同理。
项目和数据库都为UTF8的话,可以不写
参考: https://blog.csdn.net/huanbia/article/details/80208466
https://www.cnblogs.com/leodaxin/p/10566362.html
https://www.oschina.net/question/2843307_2286814

浙公网安备 33010602011771号