将拉丁语mysql数据转换为utf8

时间:2010-06-07 00:36:10

标签: mysql unicode utf-8

我现在想使用utf 8,但我的所有数据都是latin1,转换数据的有效方法是什么。我也知道如何将数据库的结构(charset)更改为utf8,我想要做的是更改现有数据的字符集。

更新

这是我的旧设置,

  1. Html输出:utf8
  2. Html输入:utf8
  3. Php - mysql连接:latin1
  4. mysql(字段和表格):latin1
  5. 以下是我的新设置,我希望这是创建多语言网站的最佳方式

    1. Html输出:utf8
    2. Html输入:utf8
    3. Php - mysql连接:utf8
    4. sql(字段和表):utf8

6 个答案:

答案 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:

https://github.com/neitanod/forceutf8

答案 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)

关于这个问题的优秀资源:

<强> Turning MySQL data in latin1 to utf8 utf-8

答案 5 :(得分:0)

如果您可以/希望使用存储为latin1的数据,但只想将其显示为UTF-8,则将UTF-8指定为连接字符集也应该有效。测试此方法的一种方法是发出查询

SET NAMES 'utf8'

在读取/写入任何数据之前建立连接。

有关详细信息,请http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html