在插入数据时,如果数据包含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));