• 【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));
            }
  • 相关阅读:
    几个基本trick
    CSP2019 树上的树 口胡
    To do List
    对代码风格的探索(持续更新)
    我回来了。
    年度悲剧
    最短路
    平衡树
    线段树-模板
    jmeter断言之JSON Assertion
  • 原文地址:https://www.cnblogs.com/masonblog/p/15826952.html
Copyright © 2020-2023  润新知