我有一张桌子,里面有很多不同语言的文字。表格和所有字段均为iso-8859-1
。字段中的数据在插入之前在不同的字符集中编码。它没有转换为latin1
,因此经常显示为胡言乱语。它可以是以下之一:
iso-8859-1
iso-8859-7
windows-1250
windows-1251
windows-1254
windows-1257
我知道哪个列映射到哪种编码。
当我选择它们时,我想做的是将它们转换为utf-8
,以便它们在最终输出中不会显示为乱码。
我的想法是使用CONVERT()
,但the docs只讨论将字符串转换为其他编码。字符串的编码似乎取自字段的编码。但那对我来说已经破裂了。
以下是我直接在数据库中查看数据的示例。
Ðàä³àëüíà øèíà ïðèçíà÷åíà äëÿ áåçäîð³ææÿ.Ñïåö³àëüíî äëÿ Land Rover
这应该是乌克兰语,并且在被放入cp1251
字段之前在latin1
中编码。如果我只是SELECT foo FROM bar
没有任何转换并将其显示到网络浏览器,告诉它使用cp1251
它将在浏览器中正确显示为西里尔文本。
我认为我现在需要做的是忽略字段为latin1
并从cp1251
转换为utf8
(或utf8mb4
)的事实。
但是,这不是我想要的:
select convert(foo_ua using 'cp1251') from mytable;
就是这样,所以latin1
显然仍在那里。
????????? ???? ?????????? ??? ??????????.?????????? ??? Land Rover
我也尝试了CAST()
,但结果相同。如何告诉它忽略latin1
并转换为cp1251
,如何从那里转到utf8
?