当前位置: 首页 > news >正文

MySql插入中文生僻字/Emoji报错django.db.utils.DataError: (1366, “Incorrect string value

在 Django + MySQL 写入生僻字(4 字节 Unicode)时报错,根本原因是 MySQL 默认的 utf8(实际是 utf8mb3)只支持最多 3 字节的字符,插入 4 字节字符时会触发。

django.db.utils.DataError: (1366, "Incorrect string value: '…' for column 'xxxx' at row 1")

执行

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

关键变量解读

变量含义
character_set_clientutf8mb4客户端发送数据时用的编码
character_set_connectionutf8mb4服务器接收并处理客户端数据用的编码
character_set_resultsutf8mb4服务器返回结果给客户端时用的编码
character_set_databaseutf8新建数据库时默认采用的编码
character_set_serverutf8服务器端级别的默认编码
collation_connectionutf8mb4_0900_ai_ci连接层面的排序/比较规则
collation_databaseutf8_unicode_ci数据库层面的排序/比较规则
collation_serverutf8_unicode_ci服务器层面的排序/比较规则

解决步骤:

1/在 Django 中指定 utf8mb4 连接

DATABASES = {'default': {'ENGINE':   'django.db.backends.mysql','NAME':     'your_db','USER':     'your_user','PASSWORD': 'your_pass','HOST':     'localhost','OPTIONS': {'charset':     'utf8mb4','init_command': "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci",},}
}

2/转换数据库 / 表 / 字段字符集

以下三种,根据情况选中其中一种进行操作-- 整库转换
ALTER DATABASE your_dbCHARACTER SET = utf8mb4COLLATE = utf8mb4_unicode_ci;-- 整表转换
ALTER TABLE your_tableCONVERT TO CHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;-- 或单列转换
ALTER TABLE your_tableMODIFY COLUMN Address VARCHAR(255)CHARACTER SET utf8mb4COLLATE utf8mb4_unicode_ci;
操作作用范围对已存在数据的影响什么时候必须执行
ALTER DATABASE整个数据库(默认值)会自动转换已存在表或列,只改变以后新建的表/列默认字符集和校对规则。你想让后来所有新表、新列都自动用 utf8mb4 时执行;否则可跳过。
ALTER TABLE … CONVERT TO整张表(所有列)会遍历该表所有字符列,将列定义和存储的数据都转换为 utf8mb4,并重建表。想一次性把整张表的所有字符列都切到 utf8mb4 时执行;要转换多列时最便捷。
ALTER TABLE … MODIFY COLUMN单个字段只修改指定列的字符集和校对规则,并在必要时转换该列数据;对其他列无影响。只需某一个字段支持 4 字节字符时执行;影响最小、锁表时间最短。

 一般来说可以第一+ 第二

http://www.dtcms.com/a/303714.html

相关文章:

  • 14、distance_object_model_3d算子
  • Web3 网络安全漏洞的预防措施
  • 解决IDEA拉取GitLab项目报错:必须为访问令牌授予作用域[api, read user]
  • 风口还是伪命题?AI + Web3 赛道价值何在?
  • Time drifts can result in unexpected behavior such as time-outs.
  • IDEA中全局搜索快捷键Ctrl+Shift+F为何失灵?探寻原因与修复指南
  • imx6ull-驱动开发篇3——字符设备驱动开发实验
  • 【C++算法】79.BFS解决FloodFill算法_图像渲染
  • 【C#|C++】C#调用C++导出的dll之非托管的方式
  • 数据结构 排序(1)---插入排序
  • 基于mysql云数据库对比PowerBI vs QuickBI vs FineBI更换数据源的可行性
  • Kafka——Kafka控制器
  • 如何选择工业电脑?
  • 【VOS虚拟操作系统】未来之窗打包工具在前端资源优化中的应用与优势分析——仙盟创梦IDE
  • Spring AI集成Elasticsearch向量检索时filter过滤失效问题排查与解决方案
  • ICT模拟零件测试方法--晶体管测试
  • Linux救援模式之应用篇
  • 算法第29天|动态规划dp2:不同路径、不同路径Ⅱ、整数拆分、不同的二叉搜索树
  • PHP云原生架构:容器化、Kubernetes与Serverless实践
  • 【人工智能】OpenAI的AI代理革命:通向超拟人交互的未来之路
  • idea 服务器Debug端口启动设置
  • WD5018电压12V降5V,2A电流输出,应用于车载充电器车载设备供电
  • AI-调查研究-41-多模态大模型量化 Qwen2.5-VL:技术架构、能力评估与应用场景详解
  • TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例
  • Android Slices:让应用功能在系统级交互中触手可及
  • 从0到1理解大语言模型:读《大语言模型:从理论到实践(第2版)》笔记
  • Botanix 主网上线,开启 BTC 可编程新时代!
  • 【ASP.NET Core】探讨注入EF Core的DbContext在HTTP请求中的生命周期
  • Ruby 发送邮件 - SMTP
  • 广泛分布于内侧内嗅皮层全层的速度细胞(speed cells)对NLP中的深层语义分析的积极影响和启示