解决数据库保存中文数据后变'???'

发布时间:2024-07-02 点击:229
问题提出:在javaee项目中,经常涉及到对数据的操作,所以连接数据库必不可少,数据编码问题必然存在,windows平台下默认使用gbk,linux下默认使用utf-8,最近在对数据保存的时候,出现了一个问题:中文字符保存到数据库后乱码,变成了’?’,并且这个问题刚开始没有产生,而是使用一段时间后突然产生,下面围绕这个问题展开论述。
分析可能原因
1.数据库编码
2.web页面编码
3.服务器编码
排除
1.数据库编码
数据库使用utf-8进行编码,可以确定数据库编码没有问题,因为之前遇到过不能保存中文字符(不是乱码)问题,就是因为数据库编码不一致造成的。
2.web页面编码
web页面使用utf-8编码,也可以排除,在后台日志中可以看到并没有乱码。
解决
连接数据库时候编码
#jdbc:mysql://127.0.0.1:3306/xxx jdbc:mysql://127.0.0.1:3306/xxx?useunicode=true&characterencoding=utf-8再次分析
查资料得知:
useunicode=true&characterencoding=utf-8中的characterencoding它的作用就是指定character_set_client和character_set_connection的值,而character_set_client和character_set_connection分别是数据库客户端访问和连接的编码。
看图
系统变量character_set_client:用来指定解析客户端传递数据的编码
系统变量character_set_connection:用来指定数据库内部处理时使用的编码
系统变量character_set_results:用来指定数据返回给客户端的编码方式
这样就可以理解了,jdbc中characterencoding=utf-8的目的是为了取出时候编码,不然取出来的就是’?’
所以可以有另一种解决方法,对数据库服务器进行指定。
如果你只愿意配置服务器的话:
在mysql的配置文件etc/mysql/mysql.conf.d/mysqld.cnf下下添加
default-character-set=utf8
总结
乱码无非三大方面,数据库编码,web页面编码,服务器编码。
平台问题,一个在windows(gbk),一个在linux(utf-8),开发时候特别容易搞乱码
数据库编码:数据入库和出库编码要一致
必需技巧:前后端统一编码


在线网络直播平台有哪些 杰出的在线网络直播平台推荐
谷歌浏览器收藏夹怎么导入 谷歌浏览器导入书签的图文步骤
苹果电脑黑屏按什么键恢复 macbook无缘无故黑屏的解决方法
301重定向以及域名重定向对SEO的影响!
?网站无法打开-虚拟主机/数据库问题
小程序支付不了-其他问题
买云服务器能干啥
域名哪里能够买到一口价的?