JDBC,从mysql中取出的中文显示为乱码

先查看各部分的字符集:show variables like ‘character%’;
结果:
在这里插入图片描述

可以看到我的大部分是不认识的 latin1,而 character_set_database 是 utf8 没什么问题。

如果数据库是空的,那么将想要更改的字符集修改为 UTF-8 就好:(UTF-8时要插入中文可能也需要先执行 set names gbk;)
set character_set_server = utf8;
*其它的修改也是一样,你喜欢可以将其全部修改为UTF-8
*如果你不知道该改哪个就都改了呗(character_set_filesystem 能不能改我也不知道)

如果已经有数据以原先的字符编码存在里面了该怎么办呢?
我们可以在中文字符串被取出时对它进行一些操作
先看看 latin1 是哪个字符集
查看各个值对应的字符集:show charset;
结果:
在这里插入图片描述
可以看到 latin1 对应的是 cp1252
所以在java代码中取出字符串时可以这样转化:
String uname = new String( “数据库中取出的字符串”.getBytes(“cp1252”), “GBK”);
// 将原字符串从 cp1252 转为 GBK 格式
// 如果结果不对,可以把 GBK 改掉,改成UTF-8等。反正我是改成GBK的。(因为我插入的时候 set names gbk; 了)
// 如果你不知道数据库中的哪个字符集对"查询结果"有影响,那就一个一个试

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值