我遇到了标准的 MySQL 导入编码问题,但我似乎无法解决它。
我的客户已经运行了一段时间的 WordPress 安装。我已将数据库转储到文件中,并在本地导入。生成的页面在整个过程中都有很多字符。
我检查了双方的数据库属性:生产:显示创建数据库wordpress;
CREATE DATABASE `wordpress` /*!40100 DEFAULT CHARACTER SET latin1 */
本地:显示创建数据库 wordpress;
CREATE DATABASE `wordpress` /*!40100 DEFAULT CHARACTER SET latin1 */
生产:显示创建表wp_posts;
CREATE TABLE `wp_posts` (
`ID` bigint(20) unsigned NOT NULL auto_increment,
...
KEY `post_date_gmt` (`post_date_gmt`)
) ENGINE=MyISAM AUTO_INCREMENT=7932 DEFAULT CHARSET=utf8
本地:显示创建表 wp_posts;
CREATE TABLE `wp_posts` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
...
KEY `post_date_gmt` (`post_date_gmt`)
) ENGINE=MyISAM AUTO_INCREMENT=7918 DEFAULT CHARSET=utf8
我已经花了几个小时阅读有关如何压缩�的论坛,但我无法得到任何工作。99% 的答案说要匹配数据库之间的字符集。如果以下情况,我认为应该有效:
mysqldump --opt --compress --default-character-set=latin1 -uusername -ppassword wordpress | ssh username@anotherserver.net mysql --default-character-set=latin1 -uusername -ppassword wordpress
我也使用 utf8 字符集完成了它。还是用�的。
我尝试直接修改 SQL 转储,将utf8或latin1放在“SET names UTF8”行中。还是用�的。
奇怪的症状
我希望这些 � 字符出现在内容中的特殊字符的位置,例如ñ或ö,但我已经看到它通常只有一个空格。我还看到它代替撇号(但不是所有撇号)、双引号和商标符号。
� 标记非常罕见。它们平均每页出现三到四次。
通过 Sequel Pro(本地或实时)查看数据库时,我没有看到任何 �。通过 Textmate 查看时,我在 SQL 中看不到任何 �。
我错过了什么?
编辑
更多信息:
我试图确定实时数据库认为编码是什么。我跑了show table status
,似乎排序规则是utf8_general_ci,
utf8_bin latin1_swedish_ci`的混合体and
。它们有什么不同?有关系吗?
我也跑了:show variables like "character_set_database"
得到了latin1
;