mysql插入中文数据变成问号如何解决

mysql插入中文数据变成问号

第一步:首先检验一下你自己的代码基本配置

1.Jdbc.properties数据库配置文件后面是不是加了characterEncoding=utf-8,如下图所示:

解决mysql插入中文数据变成问号问题,告别乱码困扰!

发现没有的话别傻看着,赶紧加起来

2.web.xml有没有配置编码过滤器,就像是这种

没有的话你自己看着办,嘿嘿,为了方便你们复制在下面写一下(是不是很贴心)

<
!-- 配置编码过滤器 -->

<
filter>

<
filter-name>
characterEncodingFilter<
/filter-name>

<
filter-class>
org.springframework.web.filter.CharacterEncodingFilter<
/filter-class>

<
init-param>

<
param-name>
encoding<
/param-name>

<
param-value>
utf-8<
/param-value>

<
/init-param>

<
/filter>

第二步:当你发现上面两个文件都没有问题的话,我们就来看看这个配置文件啦.

1.看数据库编码格式

先登录服务器,进到你的数据库,登录数据库命令(下面的数据库名指的是你创建的数据库名称,比如说test):

mysql -u root -p 数据库名

然后执行下面的命令查看你数据库的编码格式

show variables like &
lsquo;
char%&
rsquo;
;

就是这个latin1在作怪,那么这个问题怎么解决呢?不要心急往下看.

2.修改mysql内部配置文件

先声明一下,最新下载的官网mysql安装包貌似都是没有my.ini文件,但是一定有my.cnf文件,这个时候你就应该去你服务器看下在哪,当然一般都在根目录下的etc/下面。

命令行:vim my.cnf

【核心】执行i命令进入编辑模式,在[mysqlid]下面新增下面一句话,也就是汉字编码格式兼容

character-set-server=utf8

:wq命令保存并退出。

3.重启mysql大功告成

我的是在根目录的bin下面执行这两个实现停启

systemctl stop mysqld.service
systemctl start mysqld.service

然后你可以很自豪的登录mysql,执行上面这个命令查看你数据库的编码格式

show variables like ‘char%'
;

是不是很惊喜很意外,哈哈哈哈。

最终经过不泄的努力,总算是把这个中文数据录入进去了,哈哈哈哈,真服自己,都想给自己转个钱啥的,问号什么的可以滚一边去了。

问题解决

存入mysql的汉字变成问号项目场景

mySql 5.7

java

配置文件:spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/XXX?useSSL=false

插入操作:

@Insert("
INSERT INTO foods(food_name,food_taste,food_price,food_description) VALUES (#{foodName},#{foodTaste},#{foodPrice},#{foodDescription})"
)
int insert(Food food);
问题描述

存入数据库后汉字变成????

原因分析:

连接数据库的设置需要制定字符集

解决方案

解决方法:数据源里面增加 useUnicode=true&
characterEncoding=UTF-8

spring.datasource.url=jdbc:p6spy:mysql://localhost:3306/XXX?useUnicode=true&
characterEncoding=UTF-8&
useSSL=false

wenti



问题背景
随着当今数字时代的到来,数据库已成为每个公司必备的核心应用之一。而MySQL作为最为流行的数据库系统之一,也成了许多企业的数据库选择。但是,随之而来的中文数据乱码问题也成为许多程序员及数据库管理员头疼的难题。
问题分析
MySQL插入中文数据会被转义成问号的原因主要是和编码有关,首先需要明确的是MySQL数据库默认支持Latin1编码,而在我们国家使用的汉字是GB系列编码,这就出现了编码不对应导致的乱码问题。
解决方法1:修改数据库默认编码
将MySQL数据库的默认字符集编码修改成utf8或者utf8mb4,以utf8为例执行以下操作:
1. 修改MySQL配置文件中的字符集设置
[mysqld]
character-set-server=utf8
2. 重新启动MySQL服务生效
systemctl restart mysqld
3. 修改表的编码方式为utf8
ALTER TABLE `表名` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
解决方法2:在脚本中设置编码
在程序脚本中执行set names utf8;来设置连接字符集编码,如:
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->query(\"SET NAMES utf8\");
解决方法3:使用转换函数
MySQL提供了一些转换函数来解决插入数据时中文乱码问题,如CONVERT()、CAST()、urlencode()等函数。使用方法:
INSERT INTO `表名` (`字段名`) VALUES (CONVERT('中 文', USING utf8));
预防措施
1. 创建表时要选择正确的字符集编码;
2. 输入数据时尽量保持使用同样的字符集编码;
3. 在程序脚本中设置连接字符集编码。
结语
针对MySQL插入中文数据变成问号问题,以上三种解决方法以及预防措施,可以帮助我们避免在开发、维护等过程中出现中文乱码问题,提升工作效率,降低工作难度。让我们告别乱码困扰,更好地使用MySQL数据库!