Moodle 1.9 REPLACE ломает строки utf8_unicode_ci

Я тестирую обновление сайта Moodle с версии 1.9 до 2.2. На тестовом поле я создал копию своего сайта Moodle 1.9. Чтобы заставить сайт работать в тестовой среде, одна из вещей, которые мне нужно сделать, это обновить жестко запрограммированные URL-адреса на что-то допустимое на тестовой машине. Для этого я использую функциональность admin/replace внутри 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 Server 5.5


person Ryan    schedule 20.06.2012    source источник
comment
То же самое происходит, когда для таблиц установлено значение utf8_general_ci.   -  person Ryan    schedule 21.06.2012


Ответы (2)


Несмотря на то, что Moodle можно обновить напрямую с 1.9 до 2.2, это не на 100% безопасно при наличии огромных объемов данных.

Во всех последних обновлениях я шел по этому пути: с 1.8 на 1.9, с 1.9 на 2.0, с 2.0 на 2.1 и с 2.1 на 2.2. Этот процесс утомителен, но позволяет избежать риска повреждения данных.

person gnuwings    schedule 21.06.2012
comment
Спасибо! Мне придется следовать рекомендованному процессу обновления 1.9 -> 2.1 -> 2.2. Проблема, описанная в вопросе, к сожалению, возникает до обновления кода Moodle. - person Ryan; 21.06.2012

Настоящая проблема заключалась в том, что инструмент экспорта данных не добавлял заголовок спецификации к экспорту utf-8. Во время импорта средство импорта анализирует несколько тысяч строк для проверки кодировки, но никогда не достигает строк, вызвавших проблему, поэтому предполагалась неправильная кодировка.

person Ryan    schedule 16.07.2012