マルチバイト以外では同じ値を返すが、マルチバイトだと異なった値が返ってくる。
CHAR_LENGTH(str)
文字列 str の長さ(文字数)を返す。 マルチバイト文字は 1 文字とみなされる。
したがって、5 個のマルチバイト文字で構成される文字列の場合、LENGTH() では 10 が返るが、CHAR_LENGTH() では 5 が返る。
LENGTH(str)
文字列 str の長さ(バイト)を返す。1個のマルチバイト文字は複数バイトになる。
したがって、5 個の 2 バイト文字で構成される文字列の場合、LENGTH() では 10 が返るが、CHAR_LENGTH() では 5 が返る。
mysql> select LENGTH('HOW-LONG?');
+---------------------+
| LENGTH('HOW-LONG?') |
+---------------------+
| 9 |
+---------------------+
1 row in set (0.00 sec)
mysql> select CHAR_LENGTH('HOW-LONG?');
+--------------------------+
| CHAR_LENGTH('HOW-LONG?') |
+--------------------------+
| 9 |
+--------------------------+
1 row in set (0.00 sec)
mysql>
mysql> select LENGTH('長さはどのくらいだろうか');
+------------------------------------+
| LENGTH('長さはどのくらいだろうか') |
+------------------------------------+
| 24 |
+------------------------------------+
1 row in set (0.00 sec)
mysql> select CHAR_LENGTH('長さはどのくらいだろうか');
+-----------------------------------------+
| CHAR_LENGTH('長さはどのくらいだろうか') |
+-----------------------------------------+
| 16 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql>
—————————————————————————————————————
追記: BINARY比較
—————————————————————————————————————
mysql> SELECT MD5('english') = MD5('ENGLISH');
+---------------------------------+
| MD5('english') = MD5('ENGLISH') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (0.00 sec)
mysql> SELECT IF('ABC' = 'abc','TRUE','FALSE');
+----------------------------------+
| IF('ABC' = 'abc','TRUE','FALSE') |
+----------------------------------+
| TRUE |
+----------------------------------+
1 row in set (0.01 sec)
mysql> SELECT IF('ABC' = BINARY 'abc','TRUE','FALSE');
+-----------------------------------------+
| IF('ABC' = BINARY 'abc','TRUE','FALSE') |
+-----------------------------------------+
| FALSE |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT IF(BINARY 'ABC' = BINARY 'abc','TRUE','FALSE');
+------------------------------------------------+
| IF(BINARY 'ABC' = BINARY 'abc','TRUE','FALSE') |
+------------------------------------------------+
| FALSE |
+------------------------------------------------+
1 row in set (0.00 sec)
mysql>