我正在做以下事情。
1)我正在导出数据库并将其保存到名为dump.sql的文件中。 2)然后通过PHP ftp将文件传输到不同的服务器。 3)文件成功传输后,管理员可以选择在新主机上运行“dbtransfer”脚本。 4)这个脚本会破坏脚本并逐行运行查询。
这很有效 - 但外语编码存在问题。我们使用的是UTF-8。
步骤1:此工作正常,文件采用UTF-8格式。 第3步:使用mb_check_encoding()测试dump.sql文件的内容时。该字符串以UTF-8形式返回。 第4步:这将使用utf8_general_ci编码创建表。信息被转储。
当我在转移后检查表格时,我得到这样的记录:'Ã,,Ã,,Ã,,Ã,,Ã,,ı,Ä°,ÅŸ,Åž,ÄŸ,Äž'。我不明白UTF-8字符串在进入数据库时如何丢失其编码。我错过了一步吗?我是否需要运行某种函数来确保将字符串解析为UTF-8?
安装系统后,我可以保存外语查询。只是转移正在搞乱。
有什么想法吗?
答案 0 :(得分:2)
在用PHP连接数据库之后,我总是在连接对象上执行以下查询以确保连接使用UTF-8:
$pdo->exec('SET NAMES \'utf8\' COLLATE \'utf8_unicode_ci\'');
另一个选择是目标表不是UTF-8。
答案 1 :(得分:1)
最有可能的是,你没有告诉MySQL你用它来说UTF-8 - 连接的字符集是错误的。使用mysql_set_charset功能。
另请注意,utf8_general_ci不是编码 - 它是排序规则。换句话说,它只告诉MySQL在比较值时应该如何处理该列(包括排序时)。
答案 2 :(得分:1)
目前尚不清楚你是如何做这些步骤的,但我们试一试。
首先,确保与字符集相关的所有数据库连接设置都设置为utf-8。数据库方面有一些,客户端也有一些。
其次,在插入任何数据之前,请执行以下查询:
SET NAMES 'utf8';