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

MySQL length()とchar_length()

    MySQLでは、length()が何度も発生します 関数とchar_length() 関数はまったく同じ結果を提供します。ただし、結果がまったく異なる場合もあります。その理由は次のとおりです。

    まず、これらの各関数の定義は次のとおりです。

    char_length()
    文字列の長さを文字数で返します。
    length()
    文字列の長さをバイト単位で返します。

    「文字」と「バイト」に注意してください。1つは文字で測定されます。 、もう1つはバイトで測定されます 。

    多くの場合、バイト数は文字列の文字数と同じになりますが、常にそうであるとは限りません。 1文字あたりに使用されるバイト数は、データの保存方法によって異なります。たとえば、文字列がUnicodeデータとして保存されている場合、1文字あたり2バイトになります。

    ASCIIテキストを使用した基本的な例(両方の関数が同じ結果を返す場合):

    SELECT 
        CHAR_LENGTH('Lit'), 
        LENGTH('Lit');
    

    結果:

    +--------------------+---------------+
    | CHAR_LENGTH('Lit') | LENGTH('Lit') |
    +--------------------+---------------+
    |                  3 |             3 |
    +--------------------+---------------+
    

    また、文字列がデータベースに保存されている場合、同じ結果が得られることがよくあります。

    SELECT 
        CHAR_LENGTH(ArtistName),
        LENGTH(ArtistName)    
    FROM Artists
    WHERE ArtistName = 'Lit';
    

    結果:

    +-------------------------+--------------------+
    | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
    +-------------------------+--------------------+
    |                       3 |                  3 |
    +-------------------------+--------------------+
    

    ただし、データベース列を変更してデータをUnicodeとして格納する場合:

    ALTER TABLE Artists 
    MODIFY COLUMN ArtistName VARCHAR(255) unicode;
    

    次に、同じクエリを再度実行します:

    SELECT 
        CHAR_LENGTH(ArtistName),
        LENGTH(ArtistName)    
    FROM Artists
    WHERE ArtistName = 'Lit';
    

    別の結果が得られます:

    +-------------------------+--------------------+
    | CHAR_LENGTH(ArtistName) | LENGTH(ArtistName) |
    +-------------------------+--------------------+
    |                       3 |                  6 |
    +-------------------------+--------------------+
    

    これは、Unicodeが各文字を2バイトとして格納するためです。

    これは、datalength()の違いに似ています およびlen() T-SQLで。

    MySQLにはoctet_length()もあります length()の同義語である関数 。


    1. PHPでmysqlndを有効にする方法は?

    2. MicrosoftIgniteセッションレコーディングが表示できるようになりました。

    3. byte []をC#からSQLServerデータベースに保存します

    4. SQL Serverでリンクされたデータベースサーバーを作成してクエリするにはどうすればよいですか?