2015-09-09 62 views
2

我有一个编码为utf8的MySQL列。那utf8实际上并不是完整的utf8集合,而是only BMP characters only up to 3 bytes in length。我不想尝试将utf8插入到MySQL中,只发现它不符合MySQL的参数,即utf8应该是什么。如果在尝试插入之前遇到MySQL的参数,有没有办法用Python进行测试?出于显而易见的原因,在some_string.encode('utf-8')上捕捉例外不够严格。检查字符串是否有效MySQL UTF8?

回答

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

要检查一个字符串是否包含上述U + FFFF Unicode字符(并因此不能被存储在使用“UTF8”编码一个MySQL表),则可以使用以下正则表达式:

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

或者,是否可以升级到MySQL 5.5或更高版本,你可能要考虑将表格转换成the utf8mb4 character set,可以存储所有Unicode字符。