2015-09-09 107 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字符。