【MovableType, MySQL】記事中に BMP 外の文字を使う

100719-0001.png

Movable Type では最新の文字セットが使えない?

【Perl】文字化けしないメールの送り方」を書いていて気づいたのだが、Movable Type では記事中に BMP(基本多言語面)外の文字が使えない。といってもこれは MT 自体の責任ではなく、MySQL の現行リリース 5.1 では BMP 外の文字をサポートしないためだ。

The ucs2 and utf8 character sets do not support supplementary characters that lie outside the BMP.

ucs2utf8 というキャラクターセットは BMP 外にある追補された文字をサポートしません。

http://dev.mysql.com/doc/refman/5.1/en/charset-unicode.html

現在開発中の MySQL 5.5 ではこれが改善されて、BMP 外の文字を扱えるキャラクターセット utf8mb4utf16utf32 が追加された。

漢(オトコ)のコンピュータ道: MySQLコミュニティ騒然!MySQL 5.5.4が与えるインパクト。
http://nippondanji.blogspot.com/2010/04/mysqlmysql-554.html

Continue reading

【MovableType, MySQL】MySQL 5.1 → 5.5 へのアップグレード

故あって Movable Type で使っている MySQL のバージョンを 5.1 → 5.5 にアップグレードしてみた。

MySQL 5.5 のダウンロード

MySQL :: Download MySQL Community Server
http://dev.mysql.com/downloads/mysql/5.5.html

上記サイトより該当するプラットフォームのものをダウンロードする。今回はミラーサイトから直接ダウンロードした。

$ wget ftp://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.5/mysql-5.5.3-m3-osx10.6-x86_64.dmg

Continue reading

MySQLにユーザーを登録する

新しくインストールするたびに調べてるので、覚え書きとしておいておく。

ユーザ権限の設定 | MySQL講座 [Smart]
http://www.rfs.jp/server/mysql/02/02.html

インストール直後は

$ /usr/bin/mysqladmin -u root password 'new-password'

とやって、rootにパスワードを設定する。更に、localhost以外のホストからもアクセス可能にする(ハイライトしている部分が入力すべきコマンド)。

$ mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'パスワード' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

後は、MySQL AdministratorでGUIを使って一般ユーザーを作れば楽ちん。

MySQL :: MySQL GUI Tools Bundle: Archived Downloads
http://dev.mysql.com/downloads/gui-tools/5.0.html

DBIx::Classのクエリで関数を使う

備忘録。

UPDATE users SET password = MD5('mypass') WHERE id = 15;

idが15であるユーザーのパスワードに’mypass’をMD5で符号化して保存する。

みたいなSQL文をDBIx::Class(というか、SQL::Abstract)で表現するにはどうするか。この場合はこう書く。

$schema->resultset( "Users" )
    ->update( {
        password => \"MD5('mypass')",
        id => 15,
    } );

なんてことはない。文字列のリファレンスを値として与えるだけだ。更に応用として次のようなSQLだと、

SELECT CONCAT( 'ID', LPAD( id, 6, '0' ) ) AS member_id FROM users;

usersテーブルからidを取り出し、頭に'ID'を付けて6桁0埋めで取り出す。(id = 15なら'ID000015'となる)

こうなる。

my $it = $schema->resultset( "Users" )
    ->search( undef, {
        "+select" => [ \"CONCAT( 'ID', LPAD( id, 6, '0' ) )" ],
        "+as" => [ "member_id" ],
    } );

say $it->first->get_column( "member_id" );
# 「ID000015」などと表示される