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

OCTET_LENGTH()関数がMySQLでどのように機能するか

    MySQLでは、OCTET_LENGTH() 関数は、バイト単位で測定された文字列の長さを返します。

    この関数は、実際にはLENGTH()の同義語です。 。

    構文

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

    OCTET_LENGTH(str)

    str 長さを返す文字列です。

    SELECT OCTET_LENGTH('Cat');
    

    結果:

    +---------------------+
    | OCTET_LENGTH('Cat') |
    +---------------------+
    |                   3 |
    +---------------------+
    

    これは、CHAR_LENGTH()を使用した場合に得られる結果と同じです。 働き。ただし、OCTET_LENGTH() 関数は、データ型に応じて異なる結果を返す可能性があります。

    データ型

    データベースにクエリを実行すると、OCTET_LENGTH() 関数は、データ型に応じて異なる結果を返す可能性があります。 Unicode文字列は2倍のバイト数を返します。 UTF-8文字列は異なる場合があります。

    UTF-8の使用例は次のとおりです:

    SELECT 
      CHAR_LENGTH(_utf8 '€'),
      OCTET_LENGTH(_utf8 '€');
    

    結果:

    +--------------------------+---------------------------+
    | CHAR_LENGTH(_utf8 '€')   | OCTET_LENGTH(_utf8 '€')   |
    +--------------------------+---------------------------+
    |                        1 |                         3 |
    +--------------------------+---------------------------+
    

    この場合、文字の長さは1ですが、オクテットの長さは3バイトです。

    次の例では、データベースにクエリを実行します。この場合、ArtistName 列はvarchar(255)を使用します データ型:

    SELECT OCTET_LENGTH(ArtistName) 
    FROM Artists
    WHERE ArtistName = 'Lit';
    

    したがって、結果は次のようになります。

    +--------------------------+
    | OCTET_LENGTH(ArtistName) |
    +--------------------------+
    |                        3 |
    +--------------------------+
    

    ただし、列をucs2に変更すると 、各文字は2バイトのUnicodeコードで表されるため、結果は異なります。

    実例を示すために、次のようにテーブルを変更できます。

    SELECT OCTET_LENGTH(ArtistName) 
    ALTER TABLE Artists 
    MODIFY COLUMN ArtistName VARCHAR(255) CHARSET ucs2;
    

    もう一度クエリすると:

    SELECT OCTET_LENGTH(ArtistName) 
    FROM Artists
    WHERE ArtistName = 'Lit';
    

    結果:

    +--------------------------+
    | OCTET_LENGTH(ArtistName) |
    +--------------------------+
    |                        6 |
    +--------------------------+
    

    トレーリングブランク

    OCTET_LENGTH() 関数は、末尾の空白(文字列の最後のスペースなど)をカウントします。したがって、最初の例の最後にスペースを追加すると、次の結果が得られます。

    SELECT LENGTH('Cat ');
    

    結果:

    +----------------+
    | LENGTH('Cat ') |
    +----------------+
    |              4 |
    +----------------+
    

    リーディングブランク

    先頭の空白(文字列の先頭のスペースなど)でも同じ結果が得られます:

    SELECT LENGTH('Cat ');
    

    結果:

    +----------------+
    | LENGTH(' Cat') |
    +----------------+
    |              4 |
    +----------------+
    

    もちろん、TRIM()などの関数を使用する場合を除きます。 、RTRIM() 、またはLTRIM() 空白を削除します。

    例:

    SELECT LENGTH(RTRIM('Cat '));
    

    結果:

    +-----------------------+
    | LENGTH(RTRIM('Cat ')) |
    +-----------------------+
    |                     3 |
    +-----------------------+
    

    その他の例

    さまざまな文字列の例を次に示します。

    SELECT 
      OCTET_LENGTH('Quiet Riot') AS 'Result 1',
      OCTET_LENGTH('') AS 'Result 2',
      OCTET_LENGTH('1234  7') AS 'Result 3',
      OCTET_LENGTH('   ') AS 'Result 4',
      OCTET_LENGTH(TRIM('   ')) AS 'Result 5';
    

    結果:

    +----------+----------+----------+----------+----------+
    | Result 1 | Result 2 | Result 3 | Result 4 | Result 5 |
    +----------+----------+----------+----------+----------+
    |       10 |        0 |        7 |        3 |        0 |
    +----------+----------+----------+----------+----------+
    

    TRIM()を使用したため、結果4と5は異なることに注意してください。 結果5から空白をトリミングする関数。文字列は空白のみで構成されているため、トリミングされた文字列の長さは0です。 。

    Transact-SQL(SQL Server、Azure用)には、MySQLのLENGTH()と同様の機能があります およびOCTET_LENGTH() 関数ですが、T-SQLではDATALENGTH()と呼ばれます 。


    1. B+treeとHashを比較したデータベースのインデックス作成

    2. 既存のチェック制約を変更する方法は?

    3. KEYキーワードはどういう意味ですか?

    4. ojdbc14.jarとojdbc6.jar