(我在DBA上首先提出了这个问题,但在常见问题解答中发现,在SO上提出SQL问题)
我正在尝试“修复”从编码损坏的SQL文本文件导入的MySQL数据库(UTF-8排序规则)。
即。 German umlauts在数据库中被破坏了。应阅读什么,例如“ü”显示为“Ô。
由于我知道REPLACE
function,我首先尝试了显而易见的事实:
SELECT * FROM `mydb`.`mytable` WHERE `mycolumn` LIKE '%ü%';
这给了我预期的结果。
接下来我试图替换它们:
UPDATE `mydb`.`mytable` SET `mycolumn` = REPLACE(`mycolumn`, 'ü', 'ü');
令我惊讶的是,这导致零行受影响。
所以即使knowing a lot about encoding,我仍然无法弄清楚如何解决这个问题(或者根本不可能)。
我的问题:
如何使用REPLACE
函数替换破碎的德国变音符号?
答案 0 :(得分:2)
要回答我自己的问题,linked possible duplicate指出了我的方向,但对我来说不是正确的解决方案。
相反,我执行了以下步骤(使用HeidiSQL):
之后,我可以成功执行我的陈述,例如。
UPDATE `mydb`.`mytable` SET `mycolumn` = REPLACE(`mycolumn`, 'ü', 'ü');
答案 1 :(得分:2)
你的'变形虫'没有破碎!这些只是编码为utf-8,所以你的'带两个点'会导致utf-8 2字节序列。这没什么不对。您的问题是您的查看器可能以ANSI编码(iso-8859-1)显示,这导致字节和字符之间的关系为1:1。然而,观众必须“解码”utf-8序列以获得字符的代码点,否则它将简单地显示utf-8起始字节以及后续字节/ s作为它在ANSI中表示的字符。我敢打赌你的视图没有配置为查看utf-8编码的文本。只需根据需要进行配置即可。
让你的'u with two dots'进行utf-8编码,然后全世界的每个观众都可以解码它的代码点,这是一个独特的unicode代码点。请记住,如果您的“带有两个点的u”是ANSI编码的,当使用不同的ANSI编码显示时,它可能会显示不同的字符,例如iso-8859-5。
答案 2 :(得分:1)
恕我直言,MySQL使用UTF-8归类 ü
或更好 ü
{}将utf8_general_ci
存储为utf_unicode_ci
是正确的EM>。 https://www.nopcommerce.com/boards/t/50136/overriding-controller-and-view-in-nopcommerce-40.aspx#202614
现在,重要的是如何解码UTF编码的SQL字符串,然后再将其打印到HTML,Android或iOS等前端。
<强> HTML 强>
如果是HTML,请在HTML页面的<head>
部分设置utf-8字符集,德语字符ü
将正确显示。
<head>
<meta charset="UTF-8"/>
...
</head>
如果没有,那么在PHP打印之前将PHP包装在utf_decode()
函数中。
注意:如果您没有在PHP中使用PHP,请使用您选择的语言查找utf-8解码功能。
<强>的Android 强>
如果使用Android
Html.fromHtml(String).toString();
<强>的iOS 强>
如果使用iOS
(NSString *)stringByDecodingHTMLEntities;