这是我的情况。
我正在从一台服务器迁移到另一台服务器。作为其中的一部分,我将遍历数据库数据。
我使用校验和来验证数据,所以我知道它是相同的。此外,我在新旧主机上创建了一个隔离的表,并将单行移到了那里。两个表中的校验和匹配,表明原始数据在字节级别上应该完全相同。
CHECKSUM TABLE test
我已经检查了结构,它也完全一样。
SHOW CREATE TABLE test
该字段的类型:
item
varchar(32) COLLATE utf8_unicode_ci NOT NULL 原始数据如下所示(在两种情况下,我都将其显示):
§lO 但是,当我使用简单的查询在PHP中检索它时:
SELECT * FROM test
在旧服务器/主机上,我得到以下原始字节序列:
-194-167-108-79-
在新服务器上,开始时我得到了几个额外的字节:
-195-130-194-167-108-79-
为什么在两台服务器之间完全相同的原始数据,表结构和查询会返回不同的结果?我应该怎么做才能确保将来的结果尽可能一致?
问题来源于stack overflow
§lO是的“ Mojibake” §lO。我认为后者(3个字符)是“正确的”吗?
原始数据如下所示(在两种情况下,我都将其显示)
是伪造的,因为用于显示它的技术可能与编码混淆了。
由于3个字符变为4,然后变为6,因此您可能具有“双重编码”。
这讨论了“双重编码”如何发生: UTF-8字符有问题;我看到的不是我存储的
如果您提供了更多信息(CREATE TABLE,十六进制,迁移数据的方法等),我们也许可以进一步弄清您遇到的麻烦。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。