如何在我的数据库中的字符上存储重音符号

时间:2011-12-09 15:32:18

标签: mysql collation

我将谷歌地理编码的响应存储到我的数据库中。

一个这样的回应在o上有一个重音符号。该镇是林孔。 (我会把重点标记放在这里给你看,但我不知道怎么做。)

当响应存储到我的mySQL数据库中时,它看起来像这样:Rincón

我意识到这与Collat​​ion有关,但我对数据库的更改感到紧张,因为我有太多的数据。当前应用于此字段的排序规则是utf8_general_ci。

任何人都可以建议: 1)utf8_general_ci是否是正确的排序规则。 2)我是否需要以某种方式在我的ajax请求中指定此排序规则?

谢谢....

1 个答案:

答案 0 :(得分:3)

UTF-8(通常)是世界上任何字符集的“安全”编码。 (并不总是效率最高的,并且有一些论据可以说Unicode代表CJK脚本及其“统一汉”模型,但继续......)

但是,您的界面程序可能无法正确转换为UTF-8或从UTF-8转换。例如,ó=> ³看起来像UTF-8数据(其中一个字符可以分布在不同数量的字节上)正在使用单字节欧洲编码呈现给您,如ISO-8859-15或MS-CP-1451或类似。

可能正确存储数据,但正确加载。如果您只是使用mysql终端程序或类似程序,请确保您的终端设置为使用UTF-8(在Unix / Linux系统上,locale应该以{{.utf8结尾。 1}},例如我的LANG=en_US.utf8}

如果您使用GUI工具或类似工具提取数据,请检查其设置/首选项面板中的字符集。

如果您将错误翻译的字符带回到您编写的应用程序中,请查看您的语言设置区域设置的工具。 (也许,INSERT例程正确,但SELECT例程有错吗?)

并且,如果要将其发送到Web,请确保您的(XML | HTML | XHTML)文件在适当的位置声明了charset=utf8转换回来从数据库插入文本时,使用iconv之类的内容从UTF-8到文档的字符集(如果可能)。 (当然,大多数非Unicode字符集只能代表Unicode的一个子集;例如,ISO-8859-15集在覆盖欧洲语言方面做得不错,但不支持西里尔语,阿拉伯语或CJK书写系统,所以可能无法翻译字符。)在Perl中,您可以使用open的传递参数或使用binmode在“文件句柄”流上设置透明字符集转换层。