You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python 3中筛选3字节及以下UTF-8字符写入utf8_general_ci数据库?

筛选Python 3字符串保留3字节及以下UTF-8字符的简便方法

当然有非常简便的实现方式!首先得明确:你提到的utf8_general_ci对应的MySQL utf8编码其实是utf8mb3,它仅支持最多3字节的UTF-8字符(对应Unicode范围 U+0000 到 U+FFFF),而4字节的UTF-8字符(比如emoji、部分生僻汉字、特殊符号如𝄞)会导致写入报错。下面给你两种实用的方法:

方法1:基于字符编码长度判断(直观易懂)

遍历字符串中的每个字符,检查其UTF-8编码后的字节长度是否≤3,保留符合条件的字符即可:

def filter_3byte_utf8(s: str) -> str:
    return ''.join(char for char in s if len(char.encode('utf-8')) <= 3)

示例测试

假设输入字符串:test_str = "Hello 🌍 世界 𝄞"(其中🌍和𝄞是4字节字符)
调用函数后返回:"Hello 世界 ",成功移除了4字节的字符。

方法2:正则表达式替换(高效简洁)

利用正则匹配所有4字节UTF-8对应的Unicode范围(U+10000 到 U+10FFFF),直接替换为空字符串:

import re

def filter_3byte_utf8_regex(s: str) -> str:
    # 匹配所有4字节UTF-8字符并移除
    return re.sub(r'[\U00010000-\U0010FFFF]', '', s)

这个方法在处理长字符串时效率更高,因为正则引擎的底层优化做得很好。

额外提醒

如果你的数据库环境允许,建议将编码改为utf8mb4(对应的排序规则utf8mb4_general_ci),这样就能支持所有UTF-8字符,无需额外筛选。但如果必须使用utf8mb3,上面的两种方法都能完美解决问题。

内容的提问来源于stack exchange,提问作者HeronAlgoSearch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:03:12