【问题标题】:Different character encoding stored in my database存储在我的数据库中的不同字符编码
【发布时间】:2011-10-12 15:31:50
【问题描述】:

我遇到了一个令人讨厌的字符编码问题,正在寻找解决方法。

过去几年我一直在维护一个 latin1_swedish_ci 格式的数据库。一切正常。在 PHPMyAdmin 中检查 varchars 时,我可以看到 ë 之类的重音符号,并且在前端它们显示正确。

最近我将我的应用程序切换到了 UTF-8。我还将我的 HTML 页面的字符编码设置为 UTF-8,但不是我的数据库。问题开始浮出水面。有时字符编码正确,有时不正确。

现实情况是,最近存储的 varchars 看起来很好,旧的 varchars(在切换到 UTF-8 之前)显示为黑色方块。如果我将页面的字符编码切换为 ISO8859-1,则会发生相反的情况。旧的特殊字符显示正常,新的特殊字符显示为黑色方块。

所以现实是我的数据库存储的特殊字符与以前不同。我怎样才能在不破坏东西的情况下收拾这个烂摊子?

【问题讨论】:

  • 确定是数据库吗?除非您尝试将 Unicode 字符存储在非 Unicode 兼容的数据类型中,否则我认为排序规则(这就是 latin1_swedish_ci 是什么)不是问题?
  • 您必须在整个管道中使用 UTF-8,这意味着您的数据库也必须转换为 UTF-8。否则,您是在将方形钉穿过圆孔。或者为每个查询即时进行字符集转换,这很痛苦。在数据库中做一次批量转换为utf-8,问题应该就解决了。
  • 嗨 Marc,但是如果我将我的数据库转换为 UTF-8,正确显示的特殊字符不会受到影响吗?还是会因为它们已经是 UTF-8 而被单独留下?

标签: php mysql character-encoding


【解决方案1】:

你可以试试这样的:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);

$string = iconv("ISO-8859-1", "UTF-8//TRANSLIT", $string);

并查看编码的字符是否改变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2016-06-13
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2016-04-19
    相关资源
    最近更新 更多