MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQL BIT_LENGTH()関数はマルチバイトで安全かどうか?


LENGTH()関数と同様に、MySQL BIT_LENGTH()関数はマルチバイトセーフ関数ではありません。 CHAR_LENGTH()やCHARACTER_LENGTH()などのマルチバイトセーフ関数と、特にUnicodeに関連するBIT_LENGTH()関数の結果の違いは、ほとんどの文字が2バイトでエンコードされているかUTFに関連していることを知っています。 -8ここで、バイト数は変化します。以下の例で示されています-

mysql> Select BIT_LENGTH('tutorialspoint');
+------------------------------+
| BIT_LENGTH('tutorialspoint') |
+------------------------------+
| 112                          |
+------------------------------+
1 row in set (0.00 sec)

上記の結果セットは、文字列「tutorialspoint」のビット長がまだUnicode文字に変換されていないため112であることを示しています。次のクエリはそれをUnicode文字に変換します-

mysql> SET @A = CONVERT('tutorialspoint' USING ucs2);
Query OK, 0 rows affected (0.02 sec)

Unicodeで文字列を変換すると、以下に示すように、Unicodeでは1文字が2バイトかかるため、結果は112ではなく224になります-

mysql> Select BIT_LENGTH(@A);
+----------------+
| BIT_LENGTH(@A) |
+----------------+
| 224            |
+----------------+
1 row in set (0.00 sec)

  1. MySQLの列ではなく行にMAX関数はありますか?

    はい、MySQLのGREATEST()を使用して、(列ではなく)行から最大値をチェックできます。まずテーブルを作成しましょう- mysql> create table DemoTable    (    Value1 int,    Value2 int,    Value3 int    ); Query OK, 0 rows affected (0.58 sec) 挿入コマンド-を使用してテーブルにレコードを挿入します mysql> insert into DemoTable

  2. MySQLで動作しないことを除いて?

    MySQL以外では使用できません。 NOT IN演算子を使用して、同じ結果を得ることができます。まずテーブルを作成しましょう- mysql> create table DemoTable1  (  Number1 int  ); Query OK, 0 rows affected (0.71 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTable1 va