mysql uft-8mb4 emoji表情 保存报错

MySQL :: Re: How to find a character which can’t be stored in a MySQL “utf8” column in Java

How to find a character which can’t be stored in a MySQL “utf8” column in Java - Stack Overflow

一开始的思路是用正则过滤emoji表情, 但找这个正则比较麻烦, 范围段比较多

也可以用hutool的工具包, 导包麻烦, 有些项目不让用

仔细想想 mysql保存报错, 本质上是默认的uft-8是utf-8mb3, 3字节, 不支持utf-8mb4的 4字节

所以转变思路, 问题变成, 如何判断是否包含utf-8mb4的字符?

最终使用代码过滤掉

/**
 * 参考: https://www.charset.org/utf-8
 */
public class StringCheckUtils {

    /**
     * 是否包含 utf-8mb4的字符
     */
    public static boolean containUTF8mb4(String input) {
        return input.codePoints().anyMatch(Character::isSupplementaryCodePoint);
    }

    public static void main(String[] args) {
        System.out.println(containUTF8mb4("张三\uD800\uDC00"));// 超过了 0xffff
        System.out.println(containUTF8mb4("李四🐖")); // emoji

        System.out.println(containUTF8mb4("李四�"));// 未超过 补充字符的范围
    }
}

==============

字符编码笔记:ASCII,Unicode 和 UTF-8 - 阮一峰的网络日志

辅助平面_百度百科

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值