因为没有“SET NAMES utf8”而损坏了国际角色;在TYPO3

时间:2013-10-13 18:41:03

标签: mysql character-encoding typo3

我在其中一个有字符编码的TYPO3波兰网站上遇到了一些问题。配置中没有设置setDBinit=SET NAMES utf8;参数。 一切正常(前端和后端),但从数据库导出。当我通过PhpMyAdmin搜索数据库或尝试使用数据导出数据库时,所有国际字符都已损坏。

官方网页http://wiki.typo3.org/UTF-8_support#SET_NAMES_utf8.3B说:

  

没有SET NAMES utf8;您的TYPO3 UTF-8设置可能有效,但转换为UTF-8后输入的数据库内容可能会将每个国际字符存储为两个单独的乱码latin1字符。

     

如果您使用phpMyAdmin检查数据库并发现新内容中的变音符号显示为两个乱码,则情况就是这样。如果您遇到这种情况,则不能再添加上述语句。您的新内容输出将被破坏。相反,你必须先纠正新添加的特殊字符。 只需删除内容,如上所述设置选项并重新输入即可轻松完成此操作。

还有其他方法可以修复损坏的字符吗?现在要编辑很多内容...... 我尝试了几乎所有导出编码和转换为另一种编码的组合等等,到目前为止我都失败了。

1 个答案:

答案 0 :(得分:4)

您可以尝试使用mysqldump将ISO-8859-1转换为utf-8:

mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
chgrep latin1 utf8 dump.sql (or when you prefer  sed -i "" 's/latin1/utf8/g' dump.sql) 
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump.sql