sql >> データベース >  >> RDS >> MariaDB

UNCOMPRESSED_LENGTH()がMariaDBでどのように機能するか

    MariaDBでは、UNCOMPRESSED_LENGTH() COMPRESS()で圧縮される前の圧縮された文字列の長さを返す組み込み関数です。 機能。

    構文

    構文は次のようになります:

    UNCOMPRESSED_LENGTH(compressed_string)

    compressed_stringの場所 は圧縮された文字列です。

    基本的な例は次のとおりです。

    SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50)));

    結果:

    +------------------------------------------------+
    | UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) |
    +------------------------------------------------+
    |                                             50 |
    +------------------------------------------------+

    ここでは、REPEAT()を使用しました 同じ文字を50回繰り返す関数。文字を繰り返すと、圧縮の候補になります。

    圧縮された文字列との比較

    圧縮された文字列と比較すると、ここでも同じです:

    SELECT
        LENGTH(COMPRESS(REPEAT('z', 50))) AS "Compressed",
        UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('z', 50))) AS "Uncompressed";

    結果:

    +------------+--------------+
    | Compressed | Uncompressed |
    +------------+--------------+
    |         16 |           50 |
    +------------+--------------+

    バイト長と文字長

    UNCOMPRESSED_LENGTH() バイトでの長さに関するレポート (文字の長さだけではなく)

    これは、著作権記号(©などのマルチバイト文字を使用してテストできます。 )、それをLENGTH()などの関数に渡します 長さをバイト単位で取得するには、CHAR_LENGTH() 文字の長さを取得するには:

    SELECT 
        UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('©', 50))) AS "UNCOMPRESSED_LENGTH()",
        LENGTH(REPEAT('©', 50)) AS "Uncompressed (Bytes)",
        LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed (Bytes)",
        CHAR_LENGTH(REPEAT('©', 50)) AS "Uncompressed (Char)",
        CHAR_LENGTH(COMPRESS(REPEAT('©', 50))) AS "Compressed (Char)";

    結果(垂直出力を使用):

    UNCOMPRESSED_LENGTH(): 100
     Uncompressed (Bytes): 100
       Compressed (Bytes): 17
      Uncompressed (Char): 50
        Compressed (Char): 17

    タイ語の文字を使用する別の例を次に示します。

    SELECT 
        UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('อ', 50))) AS "UNCOMPRESSED_LENGTH()",
        LENGTH(REPEAT('อ', 50)) AS "Uncompressed (Bytes)",
        LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed (Bytes)",
        CHAR_LENGTH(REPEAT('อ', 50)) AS "Uncompressed (Char)",
        CHAR_LENGTH(COMPRESS(REPEAT('อ', 50))) AS "Compressed (Char)";

    結果(垂直出力を使用):

    UNCOMPRESSED_LENGTH(): 150
     Uncompressed (Bytes): 150
       Compressed (Bytes): 18
      Uncompressed (Char): 50
        Compressed (Char): 18

    このタイ文字は3バイトを使用するため、文字列の長さが50文字しかない場合でも、非圧縮文字列は150バイトになります。

    ヌル引数

    nullを渡す nullを返します :

    SELECT UNCOMPRESSED_LENGTH(null);

    結果:

    +---------------------------+
    | UNCOMPRESSED_LENGTH(null) |
    +---------------------------+
    |                      NULL |
    +---------------------------+

    引数がありません

    UNCOMPRESSED_LENGTH()を呼び出す 引数の数が間違っているか、引数を渡さないと、エラーが発生します:

    SELECT UNCOMPRESSED_LENGTH();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'UNCOMPRESSED_LENGTH'

    1. 見落とされた最適化の回避

    2. Oracle:DDLとトランザクションのロールバック

    3. PostgreSQLBツリーインデックスに関する注意

    4. SQL Serverのフォーマット文字列とは何ですか?