Oracleでは、次の違いは何ですか:
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 BYTE),
ID_CLIENT NUMBER
)
と
CREATE TABLE CLIENT
(
NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
ID_CLIENT NUMBER
)
データベースの文字セットが UTF-8 であると仮定します。これは、最近のバージョンの Oracle で推奨される設定です。この場合、一部の文字はデータベースに格納するのに 1 バイト以上かかります。
フィールドを として定義するとVARCHAR2(11 BYTE)
、Oracle は格納に最大 11 バイトを使用できますが、実際にはフィールドに 11 文字を格納できない場合があります。たとえば、英語以外の文字など、格納に 1 バイト以上かかるものもあるためです。
Oracle に指示したとおりにフィールドを定義することで、VARCHAR2(11 CHAR)
各文字を格納するのに何バイトかかるかに関係なく、11 文字を格納するのに十分なスペースを使用できます。1 文字には最大 4 バイトが必要な場合があります。
1 つには正確に 11 バイトのスペースがあり、もう一方には正確に 11 文字のスペースがあります。Unicode バリアントなどの一部の文字セットは、文字ごとに複数のバイトを使用する場合があるため、エンコーディングによっては、11 バイト フィールドに 11 文字未満のスペースがある場合があります。
http://www.joelonsoftware.com/articles/Unicode.htmlも参照してください。
システム構成に応じて、BYTESで測定されるCHARのサイズは異なる場合があります。あなたの例では:
私は Oracle ユーザーではないのでわかりませんが、違いは Unicode (UTF-16/32) などのマルチバイト文字セットを使用する場合にあると思います。この場合、11 バイトは 11 文字未満になる可能性があります。
また、これらのフィールド タイプは、アクセント付きの文字または大文字と小文字に関して異なる方法で処理される場合があります。 .