MYSQL/char_length, length, 文字サイズ, 文字数
文字列を数えたいときは
char_length()つかいましょ。
>> tableのcharsetが utf8なら以下の結果になる。
mysql> select post_title, char_length(post_title) from wp_posts where post_status='publish';
+--------------------------------------------+-------------------------+
| post_title | char_length(post_title) |
+--------------------------------------------+-------------------------+
| サンプルページ | 7 |
| セキュリティインテリジェンス | 14 |
| セキュリティ識別子 | 9 |
| さくいんで探す | 7 |
| CPRM | 4 |
+--------------------------------------------+-------------------------+
5 rows in set (0.01 sec)
>> 以下は、tableのcharsetが latin1 の場合
length()はバイト数なのか良く分からないがUTF8の文字長を確認したところ以下の結果になった。
char_length()を使った方が無難。
これで分かるようにUTF8の全角文字1文字に3バイト、半角英数字に1バイト使っていることが分かる。
テーブル作成時に型の長さを指定するときは考慮すべきだ。
varchar(300)で全角100文字と計算できる。
select *, length(wd), char_length(wd) from memo_wd_everyone;
+-----------------------------------+---------+------------+-----------------+
| wd | memo_id | length(wd) | char_length(wd) |
+-----------------------------------+---------+------------+-----------------+
| 労働基準法 | 1595 | 32 | 15 |
| 事実の不知 | 1285 | 31 | 15 |
| メモリコンパクション | 931 | 64 | 30 |
| デフラグ | 931 | 27 | 12 |
| デフラグメンテーション | 931 | 71 | 33 |
| フェールオーバ | 921 | 45 | 21 |
| フェイルオーバ | 921 | 46 | 21 |
| システムの信頼性 | 921 | 52 | 24 |
| スイッチオーバ | 921 | 45 | 21 |
| 冗長ビット | 919 | 34 | 15 |
| 稼働率 | 922 | 19 | 9 |
| 良心 | 1402 | 13 | 6 |
| 良心の呵責 | 1404 | 32 | 15 |
| w3m | 1373 | 3 | 3 |
| 法の不知 | 1285 | 25 | 12 |
+-----------------------------------+---------+------------+-----------------+
15 rows in set (0.00 sec)
更に以下の結果みてみると半角は1バイトで数えられているのが分かる。
name char_length(name)
R 1
ef 2
JR 2
ACE 3
島 3
薪 3
HUB 3
暁 3
ampm 4
( Thanks. )
11.3. 文字列関数
http://dev.mysql.com/doc/refman/5.1/ja/string-functions.html
# CHAR_LENGTH(str)
文字で測られたストリング str の長さを戻します。マルチバイト文字は、1 文字として数えられます。つまり、2 バイトの文字を 5 つ含むストリングには、CHAR_LENGTH() は 5 を戻すところを、LENGTH() は 10 を戻します。
# LENGTH(str)
バイトで測られたストリング str の長さを戻します。マルチバイト文字は、複数バイトとして数えられます。つまり、2 バイトの文字を 5 つ含むストリングには、CHAR_LENGTH() は 5 を戻すところを、LENGTH() は 10 を戻します。
mysql> SELECT LENGTH('text');
-> 4