如何将字符串转换为在latin-1字段中的utf-8,但在MySQL SELECT查询中最初是另一个字符集?

时间:2014-06-27 12:06:34

标签: mysql utf-8 character-encoding

我有一张桌子,里面有很多不同语言的文字。表格和所有字段均为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

0 个答案:

没有答案