MySQLのカラム切り捨て問題
返信数: 7
MySQLのカラム切り捨て問題,Moodleに影響しなければいいのですが。
Re: MySQLのカラム切り捨て問題
> MySQLのカラム切り捨て問題,Moodleに影響しなければいいのですが。
MoodleのユーザID (varchar(100)) に関しては、問題なさそうです。
user/editadvanced_form.php1) の137行目あたりで、入力可能な文字をチェックしていますので、「moodle a」というようなユーザIDは登録できません。
1) user/editadvanced_form.php
//check allowed characters
if ($usernew->username !== moodle_strtolower($usernew->username)) {
# 半角英数字100文字のユーザIDは作れたりします。
MoodleのユーザID (varchar(100)) に関しては、問題なさそうです。
user/editadvanced_form.php1) の137行目あたりで、入力可能な文字をチェックしていますので、「moodle a」というようなユーザIDは登録できません。
1) user/editadvanced_form.php
//check allowed characters
if ($usernew->username !== moodle_strtolower($usernew->username)) {
$err['username'] = get_string('usernamelowercase');
} else {if (empty($CFG->extendedusernamechars)) {
$string = eregi_replace("[^(-\.[:alnum:])]", '', $usernew->username);
if ($usernew->username !== $string) {
$err['username'] = get_string('alphanumerical');
}
}
}# 半角英数字100文字のユーザIDは作れたりします。

Re: MySQLのカラム切り捨て問題
$CFG->extendedusernamechars をセットしていても大丈夫でしょうか。
Re: MySQLのカラム切り捨て問題
> $CFG->extendedusernamechars をセットしていても大丈夫でしょうか。
下記のように確認しました限りでは、大丈夫なようです。
テスト環境:
Moodle 2.0 dev
PHP Version 5.2.5
MySQL 5.0.51a
前提:
Moodleの設定「サイト管理 > セキュリティ > サイトポリシー > ユーザ名に拡張文字を許可する (extendedusernamechars)」を有効にします。
テスト1:
ユーザを重複登録する
手順:
1. ユーザ「moodle」を登録します。
2. 再度、ユーザ「moodle」の登録を試みます。
結果:
エラー「このユーザ名はすでに使用されています。他のユーザ名を入力してください。」が表示されます。
テスト2:
ユーザ名を存在する他のユーザ名に変更する
手順:
1. ユーザ「moodle」および「moodle a」を登録します。
2-1. ユーザ「moodle a」のユーザ名を「moodle」に変更します。
2-2. ユーザ「moodle」のユーザ名を「moodle a」に変更します。
結果:
2-1、2-2両者とも、エラー「このユーザ名はすでに使用されています。他のユーザ名を入力してください。」が表示されます。
テスト3
ユーザテーブル「mdl_user」のユーザ名フィールド「username」の最大長 (varchar(100)) に合わせたユーザを重複登録する
手順:
1. ユーザ「aaa ...」 (半角「a」100文字) を登録します。
2-1. ユーザ「aaa ... b」 (半角「a」100文字 + 半角スペース1文字 + 半角「b」1文字) を登録します。
2-2. ユーザ「aaa ... b」 (半角「a」100文字 + 半角「b」1文字) を登録します。
結果:
2-1、2-2両者とも、エラー「このユーザ名はすでに使用されています。他のユーザ名を入力してください。」が表示されます。
下記のように確認しました限りでは、大丈夫なようです。
テスト環境:
Moodle 2.0 dev
PHP Version 5.2.5
MySQL 5.0.51a
前提:
Moodleの設定「サイト管理 > セキュリティ > サイトポリシー > ユーザ名に拡張文字を許可する (extendedusernamechars)」を有効にします。
テスト1:
ユーザを重複登録する
手順:
1. ユーザ「moodle」を登録します。
2. 再度、ユーザ「moodle」の登録を試みます。
結果:
エラー「このユーザ名はすでに使用されています。他のユーザ名を入力してください。」が表示されます。
テスト2:
ユーザ名を存在する他のユーザ名に変更する
手順:
1. ユーザ「moodle」および「moodle a」を登録します。
2-1. ユーザ「moodle a」のユーザ名を「moodle」に変更します。
2-2. ユーザ「moodle」のユーザ名を「moodle a」に変更します。
結果:
2-1、2-2両者とも、エラー「このユーザ名はすでに使用されています。他のユーザ名を入力してください。」が表示されます。
テスト3
ユーザテーブル「mdl_user」のユーザ名フィールド「username」の最大長 (varchar(100)) に合わせたユーザを重複登録する
手順:
1. ユーザ「aaa ...」 (半角「a」100文字) を登録します。
2-1. ユーザ「aaa ... b」 (半角「a」100文字 + 半角スペース1文字 + 半角「b」1文字) を登録します。
2-2. ユーザ「aaa ... b」 (半角「a」100文字 + 半角「b」1文字) を登録します。
結果:
2-1、2-2両者とも、エラー「このユーザ名はすでに使用されています。他のユーザ名を入力してください。」が表示されます。
Re: MySQLのカラム切り捨て問題
奥村先生は、
http://rryu.sakura.ne.jp/nisenise-fuhito/2008/09/25/979.html
こちらのページの
http://rryu.sakura.ne.jp/nisenise-fuhito/2008/09/25/979.html
こちらのページの
ちなみにカラム切り捨ての方は、文字コードを指定せずにテーブルを作った場合に問題になる場合がある。たとえばMobavle Typeのエントリータイトルに255文字以上入力して保存すると、末尾の文字が化けてしまう場合がある。これはMovable Type側はUTF-8の文字列を送っているが、MySQL側はISO-8859-1として扱うので、UTF-8の途中のバイトで切り捨てられてしまうた めである。
この件を心配されているのではないでしょうか?Re: MySQLのカラム切り捨て問題
早とちりしていました.
ユーザネームは確かアルファベットと数字だけでしたね.少なくともマルチバイト文字は含まれないので,UTF-8→ISO-8859-1のような問題は無いですね.それにUTF-8でデータベースを作ってあれば,この変換も発生しないので,たとえば個人で作成したブロック等でなければ問題は無いですね.
Re: MySQLのカラム切り捨て問題
秋山です
ユーザ名は、設定によっては全角でもOKなはずです。
ユーザ名は、設定によっては全角でもOKなはずです。
Re: MySQLのカラム切り捨て問題
むむ,確かに.
if (empty($CFG->extendedusernamechars)) {
この設定次第ですね.
でもデータベースがUTF-8ならばコード変換が行なわれず,コード変換による文字列長の変化さえ生じなければ問題は無いですよね?