0

我正在测试从 1.9 版到 2.2 版的 Moodle 站点升级。在一个测试盒上,我创建了我的 Moodle 1.9 站点的副本。为了让站点在测试框架上运行,我必须做的一件事是将硬编码的 URL 更新为在测试机器上有效的东西。为此,我使用 Moodle 1.9 中的管理/替换功能,即

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 语句是多字节安全的

我的问题:

  1. 我究竟做错了什么?一个简单的REPLACE不应该有这些奇怪的副作用。
  2. 有没有简单的方法可以消除损坏?

测试服务器:* IIS 7 * PHP 5.3.13 * MySQL 服务器 5.5

4

2 回答 2

1

尽管 Moodle 可以直接从 1.9 升级到 2.2,但如果有大量数据,它也不是 100% 安全的。

在最近的所有升级中,我都遵循这条路径:1.8 到 1.9、1.9 到 2.0、2.0 到 2.1 和 2.1 到 2.2。这个过程很乏味,但它避免了数据损坏的任何风险。

于 2012-06-21T14:45:48.980 回答
0

这里真正的问题是数据导出工具没有向 utf-8 导出添加 BOM 标头。在导入期间,导入器解析几千行以检查编码,但它从未命中导致问题的行,因此假定编码不正确。

于 2012-07-16T22:12:48.197 回答