解决数据库中文乱码问题

时间:2022-02-07 06:35:35

maven工程打印sql日志

之前maven工程用的slf4j+simple,只可以打印INFO级别以上的日志,不知道怎么输出sql日志。然后各种百度,各种配置搞都搞晕了,最后还是读了官方文档,一步一个脚印slf4j手册。SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。我希望用log4j,不需要再web.xml中配置,只需要在pom.xml中引入

<dependency> 
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.8.0-alpha2</version>
</dependency>

即可。然后它会搜索resources下面的log4j.properties文件,在该文件中加上框架日志配置,持久层的框架是使用的mybatis,配置如下

log4j.logger.org.mybatis.spring=info
log4j.logger.org.apache.ibatis=info
log4j.com.mysql.jdbc.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

这时sql日志打印到输出台,可以看到写入数据库之前中文没有乱码,说明是数据库的问题,为了进一步验证,我连接了另一个数据库,经测试在该数据库中读如中文正常,证明了是数据库配置的原因。

修改数据库的配置

使用 show variables like ‘character%’;来查看查看当前数据库的相关编码集,character_set_server=latin,这篇博客对相关配置介绍的比较详细。需要修改MYSQL安装目录在的my.ini文件,我本地的MQSQL是安装在C:\Program Files\MySQL\MySQL Server 5.5该目录下的。
需要需改两个地方:

  • [mysql]
  • default-character-set=utf8
  • [mysqld]
  • character-set-server=utf8

只需将这两处修改为utf8,但保存的过程中却遇到拒绝访问的问题。先是修改了文件的访问权限,右击my.ini文件,属性—>安全—>修改权限,还是无法保存,采取了另一种方式,先把文件拷到桌面,再进行修改再拷回源目录,会提醒说需要提供管理者权限,点确定即可。

Emoji表情字符存储

Emoji表情字符存储有问题,或者遇到保存字符串到数据库里出现\xF0\x9F\x92\x94类似问题时,请尝试使用这个工具
Emoji表情转换

总结:感觉一步一步的把遇到的问题解决还是很有成就感的,在解决的过程中也遇到自己心浮气躁的时候,其实只要静下来读读官方文档,还是很简单的。解决这个问题对我来说并不是很容易的一件事,有时候会像无头苍蝇一样,有时候又会进去了之后出不来,发散太多,导致任务的延迟。希望自己以后多多掌握解决问题的套路,快速定位解决问题,但也希望自己静下心来深入学习技术,不仅仅停留在会使用的阶段。