【问题标题】:Converting latin1_swedish_ci to utf8 with PHP使用 PHP 将 latin1_swedish_ci 转换为 utf8
【发布时间】:2011-10-02 13:57:28
【问题描述】:

我有一个数据库,其中填充了 ♥•â—♥ Dhaka ♥•â—♥(应该是 ♥•●♥ Dhaka ♥•●♥)之类的值,因为我在创建数据库时没有指定排序规则。
现在我想修复它。我无法再次从最初获取数据的位置获取数据。所以我在想是否有可能在 php 脚本中获取数据并将其转换为正确的字符。
我已将数据库和字段的排序规则更改为utf8_general_ci..

【问题讨论】:

  • 如何从♥•â—♥获取原始文本?

标签: php mysql character-encoding


【解决方案1】:

排序规则与字符集不同。排序规则仅用于文本的排序和比较(这就是其中有一个语言术语的原因)。实际的字符集可能不同。

最常见的故障不是在数据库中,而是在 PHP 和 MySQL 之间的连接中。连接的默认字符集通常是 ISO-8859-1。您需要使用 SQL 查询 SET NAMES 'utf-8';mysql_set_charset 函数更改连接后的第一件事。

还要检查表的字符集。如果您没有指定 UTF-8 开头,这也可能是错误的(同样:这与排序规则不同)。但请务必在此处更改任何内容之前进行备份。 MySQL 会尝试从前一个字符集转换字符集,因此如果您实际上已将 UTF-8 数据保存在 ISO-8859-1 表中,则可能需要从备份中重新加载数据。

【讨论】:

  • 好的。这些字符♥•●♥ 会完全像这样保存在utf8_general_ci 字符集中吗?我怎么知道在保存这些字符♥•â—♥ 时使用了什么字符集?
  • utf8_general_ci 不是字符集,而是排序规则。实际的字符集称为 utf-8,是表的另一个属性。 utf-8 能够对现有的大多数字符进行编码,所以是的(确实,SO 本身使用 UTF-8,所以如果您的问题的答案是“否”,您将无法向我显示这些字符)。至于第二个问题,首先检查您的表格的字符集以及保存文本时的连接。
  • 谢谢。我现在明白了。 :) 将 mysql_set_charset 设置为 utf8 有助于新条目。查看其他细节。 :)
【解决方案2】:

我会调查mb_detect_encoding()mb_convert_encoding(),看看他们是否可以帮助您。

【讨论】:

  • 当我在 ♥•â—♥ Dhaka ♥•â—♥♥•●♥ 上使用 mb_detect_encoding 时,在这两种情况下都说它是 UTF-8。现在该怎么办?
  • 听起来像是一个损坏的编码问题。阅读:stackoverflow.com/questions/1344692/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多