【MySql】保存emoji表情
前言#
数据库版本:阿里-MySql8
字符集:utf8
排序规则:utf8_general_cli
在插入数据时,如果数据包含emoji表情
会报错:
Incorrect string value: '\xF0\x9F\x98\x82' for column 'content' at row 1
原因#
mysql中的”utf8“最大只支持3 个bytes,而真正的utf8编码(大家都使用的标准),最大支持4个bytes。
正是由于mysql的utf8少一个byte,导致中文的一些特殊字符和emoji都无法正常的显示。
mysql真正的utf8其实是utf8mb4,这是在5.5版本之后加入的。
而目前的“utf8”其实是utf8mb3。mb就是 max bytes的意思(猜测)。
所以尽量不要使用默认的utf8,使用utf8mb4才是正确的选择。
解决方案#
方案一#
调整MySql数据库的字符集和排序规则,将utf8修改为utf8mb4。
网上有很多完整的处理方案
参考链接:https://www.cnblogs.com/fozero/p/10472522.html
方案二#
将内容进行Base64编码后再进行保存,当时从数据库取出数据后也需要对内容进行Base64解码。
这种方案,不需要调整mysql的配置,也不用考虑各种中间环节的编码问题,缺点是增加了代码量和维护工作。
C#进行Base64编码解码的操作
/// <summary> /// Base64编码,加密。需要注意编码格式 /// </summary> /// <param name="data"></param> /// <returns></returns> public static string ToBase64Encode(this string data) { if (data == null) return null; return Convert.ToBase64String(Encoding.UTF8.GetBytes(data)); } /// <summary> /// Base64解码,解密。需要注意编码格式 /// </summary> /// <param name="data"></param> /// <returns></returns> public static string ToBase64Decode(this string data) { if (data == null) return null; return Encoding.UTF8.GetString(Convert.FromBase64String(data)); }
分类:
02 SQL/Dapper
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】