You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB/MySQL插入Unicode emoji部分显示为问号,遗漏了哪些配置?

问题根因

MySQL中官方自带的utf8字符集实际是utf8mb3,仅支持最长3字节的Unicode字符,你可以正常显示的⚡️刚好属于3字节字符,而👑、😜等无法显示的emoji均为4字节Unicode字符,超出了utf8mb3的支持范围,存储时会被截断转换为问号。

需要修改的配置项
  • 数据库连接参数调整
    原有连接代码中的charset参数值从utf8改为utf8mb4,修改后代码示例:
    mysql.connector.connect(host="localhost", user="root", password="****", database="dbname", charset='utf8mb4')
    
  • 连接后执行的编码设置调整
    原有SET NAMES utf8;改为SET NAMES utf8mb4;,修改后代码示例:
    mycursor = mydb.cursor()
    mycursor.execute("SET NAMES utf8mb4;")
    mydb.commit()
    
    若已经在连接参数中指定了charset='utf8mb4',该语句可以省略。
  • MySQL服务端全局配置调整
    编辑MySQL配置文件(Linux为my.cnf,Windows为my.ini),添加/修改以下配置后重启MySQL服务:
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_bin
    
    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    重启后可执行以下语句验证配置是否生效:
    SHOW VARIABLES LIKE '%char%';
    SHOW VARIABLES LIKE '%collation%';
    
  • 确认库、表、列全层级字符集配置
    仅修改列的排序规则不生效,需确保数据库、表、对应列的字符集均为utf8mb4,可执行以下语句核对:
    -- 核对库字符集
    SHOW CREATE DATABASE 你的库名;
    -- 核对表和列字符集
    SHOW CREATE TABLE 你的表名;
    

注意:此前已经存储为问号的4字节emoji数据无法恢复,需要重新插入才可以正常显示。

内容的提问来源于stack exchange,提问作者miran80

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:36:01