如何用MySQL REPLACE函数替换破碎的德语变音符号?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用MySQL REPLACE函数替换破碎的德语变音符号?相关的知识,希望对你有一定的参考价值。
(我不小心在DNA中问了这个问题,但在常见问题解答中找到了这里的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
函数来替换破碎的德国变音符号?
为了回答我自己的问题,linked possible duplicate指出了我的方向,但对我来说不是正确的解决方案。
相反,我做了以下步骤(使用HeidiSQL):
- 右键单击树中的表。
- 选择“编辑”
- 将“默认排序规则”的下拉值更改为“latin_german1_ci”。没有勾选“转换数据”复选框。
- 单击底部的“保存”按钮。
- 将“默认排序规则”的下拉值更改为“utf8_general_ci”。没有勾选“转换数据”复选框。
- 单击底部的“保存”按钮。
在那之后,我可以成功执行我的陈述,例如
UPDATE `mydb`.`mytable` SET `mycolumn` = REPLACE(`mycolumn`, 'ü', 'ü');
你的'变形金刚'没有破碎!这些只是编码为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。
恕我直言,MySQL使用UTF-8校对ü
或更好的ü
将utf8_general_ci
存储为utf_unicode_ci
是正确的。 (Discussion on why to prefer utf8_unicode_ci
)
现在,重要的是如何解码UTF编码的SQL字符串,然后再将其打印到html,android或ios等前端。
HTML
如果是HTML,请在HTML页面的<head>
部分设置utf-8字符集,德语字符ü
将正确显示。
<head>
<meta charset="UTF-8"/>
...
</head>
如果没有,那么在php的情况下,在打印之前将变量包装在utf_decode()
函数中。
注意:如果您没有在PHP中使用PHP,请使用您选择的语言查找utf-8解码功能。
Android的
在Android使用的情况下
Html.fromHtml(String).toString();
iOS版
在iOS使用的情况下
(NSString *)stringByDecodingHTMLEntities;
以上是关于如何用MySQL REPLACE函数替换破碎的德语变音符号?的主要内容,如果未能解决你的问题,请参考以下文章