我们有两个不同的编码数据(utf8和latin1)组成的表,它是从两个不同的应用程序用例中插入的。 如果我们在一个编码中获取数据,我们就会遇到其他语言文本的字符串问题。我们需要将总表数据转换为单个编码。
例如:
表X
id名称数据编码
1ébarber - utf8
2àgogo - latin1
如果我们使用“latin1”连接字符集,我们会遇到“ébarber”(断字符串)的问题。 如果我们使用“utf8”连接字符集,我们会遇到“àgogo”(断弦)的问题。
如何将此表数据转换为utf8或latin1的单一编码?
请分享您的想法以解决此问题。
答案 0 :(得分:0)
有可能。但这很痛苦。
BINARY
UPDATE
。utf8
。详细说明:
第1步:转换为二进制:
ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...; -- with suitable matching other stuff, or
ALTER TABLE Tbl MODIFY COLUMN col BLOB ...; -- if it were TEXT.
第2步:找到latin1行(否定以下内容):
SELECT HEX(col) ...
提取十六进制以用于下面的正则表达式
此正则表达式检查utf8(实际上是utf8mb4):
/^(
[\xC2-\xDF] [\x80-\xBF]
| \xE0[\xA0-\xBF][\x80-\xBF]
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| \xF0[\x90-\xBF][\x80-\xBF]{2}
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
)+/ox
组合这些应该告诉你一行可能是 utf8。
第3步:这会将列(col
)从latin1编码转换为utf8:
CONVERT(CONVERT(col USING latin1) USING utf8)
第4步:让它成为utf8:
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...; -- or
ALTER TABLE Tbl MODIFY COLUMN col TEXT ... CHARACTER SET utf8 ...;
警告!虽然我所知道的各个部分都可以使用,但是拼凑在一起的组合已经未进行了测试。我强烈怀疑会有某种形式的打嗝。