记一次存储emoji表情问题

 


记一次存储emoji表情

问题原因

  1. mysql常用的字符集如下

    字符集: utf8mb3
    排序规则: utf8mb3 general_ci
    # 上面的字符集就是我们所说的普通的utf-8
    
    字符集:utf8mb4
    排序规则:utf8mb4 0900 ai ci
    
  2. 上述两种字符集想要存储emoji需要使用utf8mb4这种字符集

  3. 查询数据库的字符集

    SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = 'your_database_name';
    
  4. 查询表的字符集

    SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = 'your_database_name' AND T.table_name = 'your_table_name';
    
  5. 查询字段的字符集

    SELECT character_set_name FROM information_schema.`COLUMNS` WHERE table_schema = 'your_database_name' AND table_name = 'your_table_name' AND column_name = 'your_column_name';
    

如果上述查询结果又任何一项不是utf8mb4都无法写入emoji

问题解决方法

使用命令行修改字符集

  1. 更改数据库字符集

    ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    
  2. 更改表字符集

    ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    
  3. 更改字段字符集

    ALTER TABLE your_table_name MODIFY your_column_name TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

使用dbeaver修改字符集

  1. 双击数据库名称,会出现如下内容,将图中标红的修改utf8mb4字符集,排序规则会随之改变

  2. 双击数据表名称,会出现如下内容,将图中标红的修改utf8mb4字符集,排序规则会随之改变

  3. 双击表字段名称,会出现如下内容,将图中标红的修改utf8mb4字符集,排序规则会随之改变

修改数据库连接方式

项目框架是django,这里以django配置为例

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env("DB_NAME"),
        'USER': env("DB_USER"),
        'PASSWORD': env("DB_PASSWORD"),
        'HOST': env("DB_HOST"),
        'PORT': env("DB_PORT"),
        # 需要在此处增加以下配置,修改数据库的连接方式为utf8mb4
        'OPTIONS': {
            'charset': 'utf8mb4',
            'init_command': "SET NAMES utf8mb4; SET CHARACTER SET utf8mb4; SET character_set_connection=utf8mb4;",
        },
    }
}
posted @   Lowell  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示