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

该文章讲述了如何在Java中检查字符串是否包含超出utf8mb4(3字节)编码范围的UTF-8字符,如emoji,通过判断字符串中的补充字符来过滤这些无法在utf8列中存储的字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 - 阮一峰的网络日志

辅助平面_百度百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值