【问题标题】:mysql encoding issue with special character带有特殊字符的mysql编码问题
【发布时间】:2009-07-13 15:54:31
【问题描述】:

我注意到我的 Rails 应用程序返回代替双引号和某些破折号,它返回一个问号字符--

有没有办法更新表格并用原始字符替换它们?

谢谢!

阿米

【问题讨论】:

标签: mysql encoding


【解决方案1】:

这些将是“智能引号”和 em- 或 en-dashes (“ ” ‘ ’ — – )。 Microsoft 应用程序倾向于使用它们来代替它们完美的 ASCII 等效项、引号、撇号和连字符。他们还将文本保存为 windows-1252,这是 ISO-8859-1 字符编码的 Microsoft 扩展,其中包括对那些花哨字符的映射,以代替 128..159 范围内的(公认无用的)控制字符。

因此,当您应该使用 windows-1252 时,直接的问题是您将文本解码为 ISO-8859-1 或 UTF-8 甚至 ASCII(或让系统默认为其中一种编码)。有关真正问题的更多背景信息,请谷歌“demoronizer”或“ASCII Dammit”。

【讨论】:

  • 感谢您的信息。正如您所建议的,我查找了有关 windows-1252 编码的更多信息。似乎 http 响应标头(指定为 UTF-8)优先于元字符集,因此我无法更改编码即席。这是有关该主题的有用信息:cs.tut.fi/~jkorpela/www/windows-chars.html
【解决方案2】:

这些问号表示结果显示环境的编码字节无效。

这些天大多数环境将是 utf-8。

如果您正在运行 mysql 控制台应用程序,请在首次连接时运行以下命令,以告诉 MySQL 服务器以 utf-8 格式返回 当前连接的所有结果:

  SET NAMES utf8;

在 Rails 中,您可以在 ActiveRecord 打开数据库连接时运行此命令,方法是在您的 database.yml 文件中添加“encoding: utf8”。您还应该确保您的网络服务器(apahce/nginx/etc)正在发送 utf-8 HTTP 标头,并且您的 HTML 文件具有 Content-Type 元标记。

您的数据库中可能存储了损坏的字节,这无济于事。如果是这样的话,你就会进入一个有趣的世界试图清理它:)

【讨论】:

  • 有同样的问题...添加 encoding: utf8 到 database.yml 使 � 字符显示正确。谢谢,我忘记了:)
【解决方案3】:
update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');

应该做的伎俩。始终首先针对测试数据库运行,直到您知道它不会破坏任何东西。

使用此声明需要您自担风险。

【讨论】:

  • 感谢您的建议。查找和替换的一个问题是我不确定要查找哪个字符串。从 mysql 控制台,它们都显示为“?” (包括那些特殊字符和合法的问号字符)我希望有一些我可以调整的编码设置。任何建议表示赞赏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
相关资源
最近更新 更多