MySQL UTF8読み込みエラー:ERROR 1071 (42000)

MySQL UTF8読み込みエラー:ERROR 1071 (42000)

- Koji Yamada の投稿
返信数: 5
http://moodle.org/mod/forum/discuss.php?d=40879&parent=188066
http://oku.edu.mie-u.ac.jp/~okumura/linux/?Moodle%2FUTF-8
などの記事を参考にmoodle 1.5.1のutf8(データベース設定はlatin1)データを1.6.1に読み込ませようとしたところ,
ERROR 1071 (42000) at line 628: Specified key was too long; max key length is 1000 bytes
なるエラーが出て,データベースの読み込みに失敗します.
MySQL Bugs:#4541
http://bugs.mysql.com/bug.php?id=4541
のバグで現在も直っていない感じです.
MySQL 5.0.24.
MySQL 4.1.21で試しましたが,同じ結果でした.
(環境:Mac OS X Server 10.4 & mysql.comのインストールファイル)

皆さんはいかがでしたか? 回避策あるでしょうか?
また,moodleのutf8運用に問題はないのでしょうか?
Koji Yamada への返信

Re: MySQL UTF8読み込みエラー:ERROR 1071 (42000)

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
Moodle1.5.1のデータベーステーブル「mdl_backup_log」のレコードを削除して、再度Moodle1.6.1へのバージョンアップをお試しください。

このレコードは、バックアップのログですのでバージョンアップには不要です。

Mitsuhiro Yoshida への返信

Re: MySQL UTF8読み込みエラー:ERROR 1071 (42000)

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
あまり美しくはないと思いますが、下記の方法もあります。

1. Moodle1.6.1用MySQLデーターベースのcollationをlatin1_xxxxにして作成する。

2. Moodle1.5.1からMoodle1.6.1へアップグレードする。

3. config.phpに下記の設定を追加する。
    $CFG->unicodedb = true;

4. lib/setup.phpを修正する。
対象箇所: 198行目

[変更後]
/// Set the client/server and connection to utf8 if necessary
    if ($CFG->unicodedb) {
        if ($db->databaseType == 'mysql') {
//            $db->Execute("SET NAMES 'utf8'");
        } else if ($db->databaseType == 'postgres7') {
            $db->Execute("SET NAMES 'utf8'");
        }
    }

[変更前]
/// Set the client/server and connection to utf8 if necessary
    if ($CFG->unicodedb) {
        if ($db->databaseType == 'mysql') {
            $db->Execute("SET NAMES 'utf8'");
        } else if ($db->databaseType == 'postgres7') {
            $db->Execute("SET NAMES 'utf8'");
        }
    }

Mitsuhiro Yoshida への返信

Re: MySQL UTF8読み込みエラー:ERROR 1071 (42000)

- Koji Yamada の投稿
ありがとうございます.いろいろ試してみました.
まず,私の環境の場合,mdl_backup_logではダメで,mdl_config_pluginsが引っかかっていたようです.とりあえずmdl_config_pluginsを消すと読めるようになりました.
もちろん,
1146: Table 'moodledb.mdl_config_plugins' doesn't exist
ADOConnection._Execute(DELETE FROM mdl_config_plugins WHERE name = 'an_nextmail', false) % line 853, file: adodb.inc.php
ADOConnection.Execute(DELETE FROM mdl_config_plugins WHERE name = 'an_nextmail') % line 1065, file: datalib.php
delete_records(config_plugins, name, an_nextmail) % line 108, file: mysql.php
enrol_authorize_upgrade(2005071602) % line 100, file: adminlib.php
のようなエラーがでます.
むりやり,
CREATE TABLE IF NOT EXISTS `mdl_config_plugins` (
`id` int(10) unsigned NOT NULL auto_increment,
`plugin` varchar(100) NOT NULL default 'core',
`name` varchar(100) NOT NULL default '',
`value` text NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `plugin_name` (`plugin`, `name`)
) TYPE=MyISAM
COMMENT='Moodle modules and plugins configuration variables';
を読ませて,mdl_config_pluginsを作り,
データベースを写したものの,文字化けが直おらず,いろいろな変換や設定を試みたのですが,ダメでした.
結局,美しくないほうの提案の lib/setup.php
// $db->Execute("SET NAMES 'utf8'");
で表示できるようになりました.
う〜ん,ソースに手を入れる必要があるのが,ちょっと悲しい..
Koji Yamada への返信

Re: MySQL UTF8読み込みエラー:ERROR 1071 (42000)

- Haruhiko Okumura の投稿
吉田さんのご指摘でうまくいったでしょうか。
私の場合は条件がちょっと違う話でしたが,1.5→1.6は小規模なテストではうまくいっています。

なお,4.1.21は使わないほうがよさそうです:
http://moodle.org/mod/forum/discuss.php?d=51881
MySQL 4.1.21 Bug
Haruhiko Okumura への返信

Re: MySQL UTF8読み込みエラー:ERROR 1071 (42000)

- Haruhiko Okumura の投稿
すいません,しばらくほったらかしにしてしまいましたが,実データで試してみましたら,やはりエラーが起こりました。

私の方は,sed 's/ varchar(250) / varchar(150) /g' のようなことをして切り抜けてしまいました。 笑顔