解决mysql表中的数据中文显示“?”

博客讨论了MySQL中Latin1字符集与UTF8的区别,指出在存储非拉丁字符时可能出现的问题。文章提供了两种解决方案:一是修改MySQL变量为utf8mb4;二是调整MySQL容器的字符集配置。重点强调了utf8mb4对全Unicode支持的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题复现

在这里插入图片描述

问题原因

这是因为你的变量值使用的字符集是Latin1

Latin1和utf8的区别

UTF-8为世界统治做好了准备,而Latin1则没有。

如果您尝试使用Latin1编码存储非拉丁字符,例如中文,日语,希伯来语,俄语等,则它们最终将以mojibake的形式出现。 您可能会发现本文的介绍性文字很有用(如果您有点Java的话,甚至还会更多)。

注意,完整的4字节UTF-8支持仅在MySQL 5.5中引入。 在该版本之前,每个字符最多增加3个字节,每个字符最多增加4个字节。 因此,它仅支持BMP平面,而不支持 表情符号飞机。 如果要完全支持4字节UTF-8,请将MySQL至少升级到5.5或使用其他RDBMS(如PostgreSQL)。 在MySQL 5.5+中,它称为utf8mb4。

在这里插入图片描述

解决方法

方法1 你可以把这三个变量的值改为utf8mb4

show variables like'character_set_%';  查看
把这三个的值设置为utf8mb4
set @@character_set_results = 'utf8mb4';
set @@character_set_connection = 'utf8mb4';
set @@character_set_client = 'utf8mb4';

在这里插入图片描述

在这里插入图片描述

方法二 归根结底这个是由于你的mysql容器字符集不是utf8所以你每次进入容器再登录mysql总是显示“?”

解决方法见博客
https://blog.youkuaiyun.com/m0_52973251/article/details/128413068?spm=1001.2014.3001.5501

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值