将 utf-8 mysqldump 导入 latin1 数据库

hct*_*pcu 5 mysql character-encoding

我在utf8中有一个phpnuke站点的转储文件。我正在尝试在新服务器上重新打开此站点。但是 nuke 使用 latin1。我需要一种使用这个 utf-8 转储文件创建 latin1 数据库的方法。我尝试了我能想到的一切。iconv, mysql 替换, php 替换...

Pie*_*oit 4

在转储的开头添加该SET NAMES \'utf8\';语句。\n这将向 MySQL 表明它将接收的命令采用 UTF8 格式。\n它将以表当前设置的任何字符集存储数据;在这种情况下,如果您的数据库位于 latin1 中,则数据将存储在 latin1 中。

\n\n

来自http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

\n\n
\n

SET NAMES 指示客户端将使用什么字符集向服务器发送 SQL 语句。因此,SET NAMES \'cp1251\' 告诉服务器,\xe2\x80\x9c 未来来自该客户端的传入消息采用字符集 cp1251。\xe2\x80\x9d 它还指定服务器应用于发送结果的字符集返回给客户端。(例如,如果使用 SELECT 语句,它指示列值使用什么字符集。)

\n
\n\n

最后一件事是 latin1 的可用字符比 utf8 少得多。对于西欧语言以外的任何语言,您都会丢失数据。

\n\n

例如,假设列test是 latin1。第一个条目将正确显示(法语口音位于 latin1 内);但是韩语的第二个条目将显示为问号。

\n\n
SET NAMES \'utf8\';\nINSERT INTO TESTME(test) VALUES (\'Bienvenue sur Wikip\xc3\xa9dia\');\nINSERT INTO TESTME(test) VALUES (\'\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4 \xec\x9c\x84\xed\x82\xa4\xeb\xb0\xb1\xea\xb3\xbc\xec\x97\x90 \xec\x98\xa4\xec\x8b\xa0 \xea\xb2\x83\xec\x9d\x84 \xed\x99\x98\xec\x98\x81\xed\x95\xa9\xeb\x8b\x88\xeb\x8b\xa4!\');\n
Run Code Online (Sandbox Code Playgroud)\n