有关如何修复现有数据库中的unicode,语言问题的建议

时间:2011-02-22 03:55:29

标签: php mysql unicode internationalization

我有一个客户端在他的数据库中弄乱了字符(我继承了这个项目,我的猜测是当用户输入文本时,它没有通过PHP或MySQL或两者都正确处理或存储)。例如,

例1:数据库字段(“about”)的值如下所示:

Dans la nature,face au ciel,un b%uFFFDb%uFFFD qui sourit quand on lui souffle sur le visage。

MySQL中此字段的排序规则目前设置为:latin1_swedish_ci

例2:另一个字段(“描述”)如下所示:

VidÃÆ'Ã,©otournÃÆ'Ã,©e dans le cadre

MySQL中此字段的排序规则目前设置为:utf_general_ci

基本上我必须修复这一切。这些示例是法语,但还有其他记录可能包含日语或中文(因此双字节字符)。

对于像示例1这样的条目,我的计划是将字段更改为utf_general_ci,并编写一个脚本将所有unicode代码转换为字符(我不确定如何执行后一部分...想法? ?)。

对于像示例2这样的条目,我不确定那些奇怪的字符是什么。

utf_general_ci是否应该在这里用来支持一个数据库表中所有可能的语言?

其他统计数据:

[peter @ akebono A_PSG] $ php --version PHP 5.2.6(cli)(内置:2008年5月8日08:54:23) 版权所有(c)1997-2008 PHP小组 Zend Engine v2.2.0,版权所有(c)1998-2008 Zend Technologies     Zend Technologies的Zend Debugger v5.2.14,Copyright(c)1999-2008,

2 个答案:

答案 0 :(得分:1)

看看这篇文章,了解您可以采取的方法:http://www.phpwact.org/php/i18n/charsets

我记得我们遇到了同样的问题,但我们使用了一个mysql实用程序来改变编码。我现在忘记了。

使用PHP,您应该查看iconv和其他字符集编码/解码方法,以检测当前编码并将其更改为您将要使用的任何标准。

修改

另外,看一下php中的多字节方法。从:http://www.php.net/manual/en/function.mb-convert-encoding.php

开始

答案 1 :(得分:0)

我不确定你是否可以在不丢失数据的情况下解码它,但我建议你做的是在将数据插入数据库之前使用utf8_encode(),因为它可以减少问题的数量例如,当您尝试将数据输出到XML时。