我正在测试Moodle站点升级,从1.9版到2.2版。在测试盒上,我创建了一个Moodle 1.9站点的副本。为了让网站在测试框架上工作,我要做的一件事就是将硬编码的URL更新为测试机器上的有效URL。为此,我使用Moodle 1.9中的admin / replace功能,即
http://mytestsite/admin/replace.php
在结果表单中,我指定要切换的URL。根据文档,这里的脚本将继续遍历Moodle安装中的所有表并运行如下所示的脚本:
UPDATE adodb_logsql
SET PARAMS = REPLACE(PARAMS, 'some_url', 'another_url')
更新过程似乎运行正常。但是,它具有以下非预期的副作用:
保存在数据库中的网站中的某些内容在REPLACE过程中看起来已损坏:
Before: Welcome to Company’s Learning
After : Welcome to Company’s Learning
根据MySQL的说法,REPLACE语句是multi-byte safe。
我的问题:
REPLACE
不应该有这些奇怪的副作用。测试服务器: * IIS 7 * PHP 5.3.13 * MySQL Server 5.5
答案 0 :(得分:1)
即使Moodle可以直接从1.9升级到2.2,如果有大量数据,它也不是100%安全的。
在最近的所有升级中,我都遵循这条路径:1.8到1.9,1.9到2.0,2.0到2.1和2.1到2.2。这个过程很繁琐,但它避免了数据损坏的任何风险。
答案 1 :(得分:0)
这里真正的问题是数据导出工具没有为utf-8导出添加BOM表头。在导入期间,导入器会解析几千行以检查编码,但它从不会遇到导致问题的行,因此假定编码不正确。