对于unicode char 0x3bc
我猜你是指带分音符的Unicode字符U+00fc拉丁文小写字母U(
ü
,以utf-8编码为\xc3\xbc。
我不认为你可以在MySQL内部进行更改。你可以这样做:
-- convert doubly-encoded UTF-8 to singly-encoded
ALTER TABLE table MODIFY column TEXT CHARACTER SET latin1;
-- deliberately lose encoding information
ALTER TABLE table MODIFY column BLOB;
-- interpret the single-encoded UTF-8 bytes as UTF-8
ALTER TABLE table MODIFY column TEXT CHARACTER SET utf8;
对于架构中的每一列。这适用于您给出的特定示例,但当一个utf-8跟踪字节在0x80-0x9f范围内时失败。这是因为MySQL的拉丁编码实际上不是ISO-8859-1,而是Windows CP1252,它以不同的方式映射范围内的字符。
最简单的方法可能是转储该批数据并对mysqldump文件进行转换。例如,从python:
# Remove one level of UTF-8 encoding
#
dump= open('/path/to/dump.sql', 'rb').read()
dump= dump.decode('utf-8').encode('iso-8859-1')
open('/path/to/dump-out.sql', 'wb').write(dump)