他の人が示しているように、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文字のデータを許可する列を持つテーブルを作成します。