将latin1转换为UTF8

时间:2011-03-08 12:19:27

标签: php mysql

我有一个数据库 - 包含表格文章。

我想将标题和内容字段转换为utf8 现在 - 所有数据都是这样的:פורטל רעל נפתח רשמית! 我希望它成为普通的希伯来字符。

由于

5 个答案:

答案 0 :(得分:8)

如果需要转换整个数据库,可以将其作为databaseback.sql文件备份,然后形成命令行 iconv -f latain -t utf-8 < databaseback.sql > databaseback.utf8.sql

您可以使用http://www.php.net/manual/en/function.iconv.php
如果你没有命令行访问权限,转换php中的每一行

最后不要忘记转换phpmyadmin中每个字段的排序规则,然后你可以轻松地重新安排utf8

更新

如果您有iconv is not recognized,则表示您没有安装iconv

更简单的解决方案是: 将MySQL数据迁移到Unicode

http://daveyshafik.com/archives/166-migrating-mysql-data-to-unicode.html

答案 1 :(得分:7)

以下MySQL函数将在双重编码后返回正确的utf8字符串:

CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8)

它可以与UPDATE语句一起使用来更正字段:

UPDATE tablename SET field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);

答案 2 :(得分:5)

您可以从此数据库创建mysqldump。然后下载像Notepad ++,open dump file,将其转换为UTF8,然后通过文件将所有编码替换为utf-8,包括第一个SET NAMES运算符。

如果通过phpMyAdmin(使用默认设置)转储到文件,请使用输出文件编码ISO-8859-1而不是UTF-8,如默认情况下所示。

答案 3 :(得分:4)

您可以编写一个执行转换的小脚本。请参阅http://www.php.net/manual/en/function.mb-detect-encoding.phphttp://php.net/manual/en/function.mb-convert-encoding.php这就是我这样做的方式。

请记住使用严格模式! http://www.php.net/manual/en/function.mb-detect-encoding.php#102510

在伪代码中它会是......像这样:

str = getDataAsString()
if(!isUTF8(str)) {
  str = convert2UTF8(str)
}
saveStr2DB()

答案 4 :(得分:2)

ALTER TABLE `tablename` CHANGE `field_name` `field_name` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL