我现在想使用utf 8,但我的所有数据都是latin1,转换数据的有效方法是什么。我也知道如何将数据库的结构(charset)更改为utf8,我想要做的是更改现有数据的字符集。
这是我的旧设置,
以下是我的新设置,我希望这是创建多语言网站的最佳方式
答案 0 :(得分:6)
如果将utf8_encode()应用于已经是UTF8的字符串,它将返回一个乱码的UTF8输出。
我做了一个解决所有这些问题的函数。它叫做forceUTF8()。
您不需要知道字符串的编码是什么。它可以是Latin1(iso 8859-1)或UTF8,或者字符串可以混合使用两者。 forceUTF8()会将所有内容转换为UTF8。
我这样做是因为一项服务给了我一个混乱的数据,将UTF8和Latin1混合在同一个字符串中。
用法:
$utf8_string = forceUTF8($utf8_or_latin1_or_mixed_string);
$latin1_string = forceLatin1($utf8_or_latin1_or_mixed_string);
我已经包含了另一个函数fixUFT8(),它将修复每个看起来乱码的UTF8字符串。
用法:
$utf8_string = fixUTF8($garbled_utf8_string);
示例:
echo fixUTF8("Fédération Camerounaise de Football");
echo fixUTF8("Fédération Camerounaise de Football");
echo fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo fixUTF8("Fédération Camerounaise de Football");
将输出:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
更新:我将theese转换为静态类,现在他们住在Github:
答案 1 :(得分:1)
您需要更改排序规则(至utf-8)。这是一个容易做到的脚本。 http://blog.vision4web.net/2008/11/change-collation-on-all-tables-and-columns-in-mysql/ 我有这个脚本的经验,它完美地运作
答案 2 :(得分:1)
您实际使用的是latin1部分,还是您的数据实际上是ASCII?
似乎有一个命令:
...但要小心,我也发现了这个:
对于这类事情似乎存在失败的命令,另一种方法可能是将表转储到文件,转换它,然后重新导入它。 (或者,如果你能说服它转储到UTF-8,那就更好了......)
这里似乎有很多信息:http://www.google.com/search?q=mysql+convert+table+to+utf8
答案 3 :(得分:1)
创建名为 dbname _new的新数据库的最佳解决方案是从旧数据库执行SQL转储。
然后获取该转储并用新的utf8数据替换charset信息,并确保将sql文件本身重新保存为utf8。
然后将其加载回新数据库,检查一切正常,然后重命名。
这可能是一个冗长的过程,所以我建议你通过ssh shell会话,并充分利用bash管道等。
答案 4 :(得分:1)
关于这个问题的优秀资源:
答案 5 :(得分:0)
如果您可以/希望使用存储为latin1的数据,但只想将其显示为UTF-8,则将UTF-8指定为连接字符集也应该有效。测试此方法的一种方法是发出查询
SET NAMES 'utf8'
在读取/写入任何数据之前建立连接。
有关详细信息,请http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html