【发布时间】: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