Linux数据库

推荐列表 站点导航

当前位置:首页 > 服务器技术 > Linux数据库 >

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

来源:网络整理  作者:  发布时间:2020-12-22 22:06
问题提出 在javaEE项目中,经常涉及到对数据的操作,所以连接数据库必不可少,数据编码问题必然存在,Windows平台下...

在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),开发时候特别容易搞乱码

数据库编码:数据入库和出库编码要一致

必需技巧:前后端统一编码

相关热词: 解决

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/server/sql/7489.shtml

相关文章
Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

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

2020-12-22 编辑:

在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),开发时候特别容易搞乱码

数据库编码:数据入库和出库编码要一致

必需技巧:前后端统一编码

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/server/sql/7489.shtml

相关文章

风云图片

推荐阅读

返回Linux数据库频道首页