« 2006年12月03日 | メイン | 2006年12月05日 »
2006年12月04日
utf8_general_ci と utf8_unicode_ci の違い
以前までは、データベース MySQL を利用したアプリケーションを作るときは、文字コードとして EUC-JP を利用していました。最近は、国際化との兼ね合いなどから UTF-8 を利用するようにしています。
MySQL で UTF-8 を扱う場合、照会順序として utf8_bin を使用していました(何も考えずに)。
utf8_bin の場合、部分一致探索 LIKE などの使用時に英字の大文字小文字が区別されてしまう。大文字小文字を区別されないようにするためには、照会順序として utf8_general_ci を使用すればよいのですが、他にも utf8_unicode_ci があることに気がつきました。
utf8_general_ci と utf8_unicode_ci では、どこが違うのだろう?
utf8_general_ci also is satisfactory for both German and French, except that ‘ß’ is equal to ‘s’, and not to ‘ss’. If this is acceptable for your application, then you should use utf8_general_ci because it is faster. Otherwise, use utf8_unicode_ci because it is more accurate.
探索等において、文字列照合の正確性と速度のトレードオフのようですね。正確性を重視するのであれば utf8_unicode_ci を使用して、速度を重視するのであれば utf8_general_ci を使用すればいいみたい。
この場合における「正確性」というのは、特定の文字に対するマッチする文字が増えるということを指すようです。アジア言語で言えば、中国の漢字を「日本の似ている漢字」でマッチさせることを指すのだろうか。
日本語を主とする場合は、良く使われている utf8_general_ci でいいか。あれ?日本語における旧字の取り扱いはどうなるのだろう。
【関連情報】
・10.10.1. Unicode Character Sets - MySQL 3.23, 4.0, 4.1 Reference Manual
http://dev.mysql.com/doc/refman/4.1/en/charset-unicode-sets.html
12:49 | コメント (3) | トラックバック | Technology
今学期は真面目にいけるのではないか
授業中ですが何か?ということで、昨日(3日)の食事内容です。
朝は、自宅で松茸ご飯を食べました。3回も松茸ご飯だぜー。ってな。最後の方なんか、味がよく分からなかった…。無洗米ではないので、炊飯器の中でも割と長持ちしましたけど。
夜は、はま寿司に行ってきました。ラストオーダー15分前だったので、席に着くなり注文注文。貯めることができるキューの数に上限があるようで、じれったい。時間帯と客の数を考慮するべきなんじゃないかと。
徹夜してプログラムを書いてました。総合研究棟 D の屋上は、見晴らしがいいらしい。空気の澄んでる時間帯なら、なおさらきれいだろう。って、登れたっけ?某所が生ゴミ臭くなってる…。掃除しないと。
自宅 (朝)
松茸ご飯, あさげ
はま寿司 (夜)
寿司