Springboot Mybatis 写数据中文变成问号 ?解决办法

背景

有一个需求,需要往数据库写入数据。但是在写入英文的时候,没有问题,写入中文的时候全部变成了问号 ‘?’。

问题排查

在最开始的写入方式是按照从map中读取数据的方式写入的,怀疑是这种原因导致的数据错误。
经测试,发现,即使使用model的方式写入也会有问题,怀疑是数据库配置除了问题。

根据MyBatis断点跟踪的时候,发现了一个异常的地方。
具体的SQL如下:

SHOW 
    VARIABLES 
WHERE
    Variable_name = 'language' 
    OR Variable_name = 'net_write_timeout' 
    OR Variable_name = 'interactive_timeout' 
    OR Variable_name = 'wait_timeout' 
    OR Variable_name = 'character_set_client' 
    OR Variable_name = 'character_set_connection' 
    OR Variable_name = 'character_set' 
    OR Variable_name = 'character_set_server' 
    OR Variable_name = 'tx_isolation' 
    OR Variable_name = 'transaction_isolation' 
    OR Variable_name = 'character_set_results' 
    OR Variable_name = 'timezone' 
    OR Variable_name = 'time_zone' 
    OR Variable_name = 'system_time_zone' 
    OR Variable_name = 'lower_case_table_names' 
    OR Variable_name = 'max_allowed_packet' 
    OR Variable_name = 'net_buffer_length' 
    OR Variable_name = 'sql_mode' 
    OR Variable_name = 'query_cache_type' 
    OR Variable_name = 'query_cache_size' 
    OR Variable_name = 'license' 
    OR Variable_name = 'init_connect'

发现其中有一个字段的结果为:

character_set_server: latin1

其他的关于字符串相关的都是utf8的。

解决方案

!!! 以下操作均需要root权限;

更改本机和服务器的相关参数的配置。

方法一:

使用set character_set_server=utf8
结果不生效,因为这种操作只是对当前有效的。

方法二:

更改默认配置文件
服务器端:
vim /etc/my.cnf
在文件中添加或者更改character_set_server=UTF8
之后service mysql restart 重启mysql服务

Mac端:

cd /etc 
sudo touch my.cnf
sudo vim my.cnf
添加
[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

之后重启mysql服务

结果比较

效果图 前后对比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值