moodle 3.7.2 upgrade で不具合

moodle 3.7.2 upgrade で不具合

- Mikio Ikeda の投稿
返信数: 6

moodle を 3.6.4 から 3.7.2 に upgrade したところ、email address を変更しようとすると、

データベースの読み込み中にエラーが発生しました。

というエラーが発生して変更できません。初めて使用する学生は必ず e-mail アドレスを入力する必要があるので、 登録できない状態になってしまいます。対処法がわかりましたら教えてください。

OS RedHat EL 7

MariaDB 10.1.31

PHP 7.1.15 です。

Mikio Ikeda への返信

Re: moodle 3.7.2 upgrade で不具合

- Mikio Ikeda の投稿
なんとなく database の文字コード周辺のような気がしますが、
MDL-66110 の Error reading from database after upgrade to 3.7.1
とも違うような気がします。
評点平均: お役立ち度: ★★★★★★★ (1)
Mikio Ikeda への返信

Re: moodle 3.7.2 upgrade で不具合

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

「ダッシュボード > サイト管理 > 開発 > デバッグ」ページで以下のオプションを選択した場合、どのようなエラーメッセージが表示されますでしょうか?

  • デバッグメッセージ debug = DEVELOPER: 開発者のための特別Moodleデバッグメッセージ
  • デバックメッセージを表示する debugdisplay = Yes (チェック済み)
添付 moodle_debug.png
Mitsuhiro Yoshida への返信

Re: moodle 3.7.2 upgrade で不具合

- Mikio Ikeda の投稿

データベースの文字コードの不一致のようですが、mysqldump で一度すべてバックアップしてからリストアするしかないでしょうか。

Debug info: COLLATION 'utf8mb4_bin' is not valid for CHARACTER SET 'utf8'
SELECT 'x' FROM mdl_user WHERE LOWER(email) COLLATE utf8mb4_bin = LOWER(?) AND mnethostid = ? AND id <> ? LIMIT 0, 1
[array (
0 => 'ここには電子メールアドレスが入る',
1 => '1',
2 => 1700,
)]
Error code: dmlreadexception
Stack trace:
  • line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
  • line 1186 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
  • line 1918 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_recordset_sql()
  • line 1903 of /lib/dml/moodle_database.php: call to moodle_database->record_exists_sql()
  • line 310 of /user/editadvanced_form.php: call to moodle_database->record_exists_select()
  • line 607 of /lib/formslib.php: call to user_editadvanced_form->validation()
  • line 543 of /lib/formslib.php: call to moodleform->validate_defined_fields()
  • line 653 of /lib/formslib.php: call to moodleform->is_validated()
  • line 171 of /user/editadvanced.php: call to moodleform->get_data()

Mikio Ikeda への返信

Re: moodle 3.7.2 upgrade で不具合

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

問題なく変換できるかどうか分かりませんが、過去に本投稿添付のシェルスクリプトを使って照合順序 (Collation) を一括変換したことがあります。

#!/bin/sh

DB="your_dbname"
USER="your_dbuser"
PASS="your_password"

(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
    mysql -p$PASS -u $USER "$DB" -e "SHOW TABLES" --batch --skip-column-names \
    | xargs -I{} echo 'ALTER TABLE `'{}'` ROW_FORMAT = DYNAMIC; \
    ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; \
    ALTER TABLE `'{}'` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
) \
| mysql -p$PASS -u $USER "$DB"
評点平均: お役立ち度: ★★★★★★★ (1)
Mitsuhiro Yoshida への返信

Re: moodle 3.7.2 upgrade で不具合

- Mikio Ikeda の投稿
このスクリプトを使用して問題は解消しました。ありがとうございます。
php mysql_collation.php -l
で確認して、データベースの文字コードのcollation が全て変更されていることを確認しました。