检查字符串是否有效MySQL UTF8?

时间:2015-09-09 00:50:28

标签: python mysql unicode utf-8

我有一个编码为utf8的MySQL列。 utf8实际上并不是完整的utf8集,而是only BMP characters only up to 3 bytes in length。我不想尝试将utf8插入MySQL只是为了发现它不符合MySQL的参数,因为utf8应该是什么。在尝试插入之前,有没有办法在Python中测试某些东西是否符合MySQL的参数?出于显而易见的原因,在some_string.encode('utf-8')上捕获异常并不严格。

2 个答案:

答案 0 :(得分:3)

>>> len(u'\uffff'.encode('utf8')) < 4 # Good; fits in utf8
True
>>> len(u'\U00010000'.encode('utf8')) < 4 # Bad; utf8mb4 only
False
>>> ord(u'\uffff') < 65536 # Good; fits in utf8
True
>>> ord(u'\U00010000') < 65536 # Bad; utf8mb4 only
False

答案 1 :(得分:1)

要检查字符串是否包含U + FFFF以上的Unicode字符(因此无法使用“utf8”编码存储在MySQL表中),您可以使用以下正则表达式:

re.match(u"[^\u0000-\uffff]", s)

或者,如果您可以升级到MySQL 5.5或更高版本,您可能需要考虑将表格转换为the utf8mb4 character set,它可以存储所有Unicode字符。