将Latin1转换为UTF8

10

我有一个数据库 - 里面有一张名为文章的表。

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

谢谢


使用 phpmyadmin,进入那张表,修改属性...简单。 - xkeshav
已经尝试过了,在pma上的数据本身看起来是相同的。 - WEBProject
1
没有更多的信息很难说该怎么做,但需要注意的一件事是,在MySQL中更改表的字符编码并不会将数据转换为新编码。数据库中存储的实际字节保持不变。 - Rob Agar
罗布是正确的...先进行更改,然后插入新数据并查看结果。 - xkeshav
1
即使在插入新数据时它能够工作 - 我仍需要转换旧数据。 - WEBProject
5个回答

9
以下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);

1
这会在特殊字符处截断单词 :( - bia.migueis

8

如果你需要转换整个数据库,可以将其备份为 databaseback.sql 文件,然后在命令行中输入以下命令:

iconv -f latain -t utf-8 < databaseback.sql > databaseback.utf8.sql

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

最后别忘了在 phpMyAdmin 中转换每个字段的排序规则,这样就可以轻松地恢复 utf8 格式。

更新

如果你遇到了 iconv is not recognized 的问题,那么说明你未安装 iconv

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

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


我尝试在CMD上运行它,得到:'iconv'不被识别为可执行的程序或批处理文件。 - WEBProject
iconv:不支持从“latain”的转换。 - Lav Patel

5
你可以从这个数据库中进行mysqldump。然后下载像Notepad++这样的软件,打开转储文件,将其转换为UTF8,然后在整个文件中替换所有编码(包括第一个SET NAMES操作符)为utf-8。
如果您通过phpMyAdmin将转储文件导出到文件(使用默认设置),请使用输出文件编码ISO-8859-1,而不是UTF-8,如默认所示。

4

请参考http://www.php.net/manual/zh/function.mb-detect-encoding.php#102510 - 你需要将最后一个参数设置为"true",这样它就能找到正确的编码方式 :) - Tobias
我应该在中间参数中放什么? - WEBProject
请使用以下代码:mb_detect_encoding($str, 'UTF-8', true); - Tobias
我得到了 UTF-8,我应该怎么做?如果它是 UTF-8,则如何转换? - WEBProject
如果数据库设置为utf8,那么输出的HTML页面呢?您是在phpmyadmin中查看还是在自己的脚本中查看?请检查您的浏览器和网页是否也设置为utf-8。 - Tobias

2

尝试

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接