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

Oracleから見た文字列の実際の長さ

    他の人が示しているように、Oracleデータベースの文字セットを使用してJava文字列をバイト配列に変換し、そこから長さをバイト単位で取得できます。ただし、これはデータベースの文字セットが何であるかを知ることに依存します。データベースが異なれば文字セットも異なるため、同じ文字列のバイト長も異なります。

    データベースがUTF-8(NLS_CHARACTERSETのような可変幅の文字セットを使用していると仮定します。 AL32UTF8)では、バイト長ではなく文字長に基づいてOracleで列を宣言することもできます。文字列の文字長を確認するだけなので、コードを簡略化できます。また、ユーザーのコミュニケーションを簡素化します。一般に、フィールドに5文字を格納できる場合と、文字列の一部である文字に応じて2文字の文字列を拒否する場合がある理由をユーザーが理解するのは困難です(UTF-8文字セットの1文字には最大3バイトが必要になる場合があります)ストレージの)。

    デフォルトでは、列を宣言するとき

    CREATE TABLE foo (
      col_name VARCHAR2(5)
    );
    

    これは、最大5バイトのデータを許可するようにOracleに指示します。ただし、バイト数に関係なく5文字のデータを許可する場合は、文字長のセマンティクスを使用できます

    CREATE TABLE foo (
      col_name VARCHAR2(5 CHAR)
    );
    

    DDLの実行中にすべてのテーブルに対してこれを実行する場合は、nls_length_semanticsを設定することもできます。 DDLを実行する前のセッションレベルで

    ALTER SESSION SET nls_length_semantics = CHAR;
    
    CREATE TABLE foo (
      col_name VARCHAR2(5)
    );
    

    最大5文字のデータを許可する列を持つテーブルを作成します。



    1. Eloquent ORM/laravelを使用したプリペアドステートメント

    2. Oracleストアドプロシージャで一時テーブルを作成して使用するにはどうすればよいですか?

    3. ファイルまたはアセンブリを読み込めません'crystaldecisions.windows.forms,version=13.0.2000.0'

    4. Nginx-実行する代わりにPHPをダウンロードする