我有奇怪的数据破坏了我的数据迁移。这些奇怪的字符按原样嵌入到实际的mysql转储文件中:
北京东方å›悦大酒店<br />\n<br />\n“The impetus
我已经获得了带有这些字符的mysql数据转储。我将数据导入Drupal,首先重新创建mysql表,然后使用Drupal的Migrate模块查询它们。
代码如下所示:
DROP TABLE IF EXISTS `news`;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `news` (
`id` int(11) NOT NULL auto_increment,
`uid` int(11) NOT NULL,
`pid` int(11) default NULL,
`puid` int(11) default NULL,
`headline` varchar(255) NOT NULL,
`teaser` varchar(500) NOT NULL,
`status` char(1) default NULL,
`date` datetime NOT NULL,
`url` varchar(255) default NULL,
`url_title` varchar(255) default NULL,
`body` text,
`caption` varchar(255) default NULL,
`gid` int(11) default NULL,
`feature` text,
`related` varchar(255) default NULL,
`change1_time` int(11) default NULL,
`change2_time` int(11) default NULL,
`change1_user` varchar(255) default NULL,
`change2_user` varchar(255) default NULL,
`expires` datetime default NULL,
`rank` char(1) default NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
KEY `status` (`status`),
KEY `expires` (`expires`),
KEY `rank` (`rank`),
KEY `puid` (`puid`),
FULLTEXT KEY `headline` (`headline`,`teaser`,`body`)
) ENGINE=MyISAM AUTO_INCREMENT=6976 DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;
最快的解决方案是胜利者 - 我的时间紧迫,而且在这里真的很痛苦!我尝试过搜索和替换解决方案,但似乎有太多不同类型的奇怪数据。如果我知道告诉他们什么(如何进行数据转储),我可以编排一个新的数据转储。
谢谢, 约翰
答案 0 :(得分:4)
这不是您问题的直接答案,但我使用了您在帖子中引用的mojibake。看起来它原来是UTF-8编码的中文文本,在Windows-1252编码中被解释为拉丁文本,在UTF-8中被重新编码重新编码并再次被解释为Windows- 1252(当你在这里发布时,最后再次编码为UTF-8)。所以它不只是mojibake,而是 double mojibake。
此外,在某些时候,从字符串中间丢失了一个字节(可能是因为它是Windows-1252中未定义的代码点之一),从而损坏了原始字符之一。通过编码链反向运行文本(编码为Windows-1252,解码为UTF-8,重复),我得到输出:
北京东方�悦大酒店<br />\n<br />\n“The impetus
替换字符�
代表受损字符。