マルチバイト以外では同じ値を返すが、マルチバイトだと異なった値が返ってくる。

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>

lenght


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>

length_2

—————————————————————————————————————
追記:  BINARY比較
—————————————————————————————————————

mysql> SELECT MD5('english') = MD5('ENGLISH');
+---------------------------------+
| MD5('english') = MD5('ENGLISH') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (0.00 sec)

md5

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>

binary_check

Comments are closed.

Post Navigation