182

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
)
4

5 に答える 5

285

データベースの文字セットが UTF-8 であると仮定します。これは、最近のバージョンの Oracle で推奨される設定です。この場合、一部の文字はデータベースに格納するのに 1 バイト以上かかります。

フィールドを として定義するとVARCHAR2(11 BYTE)、Oracle は格納に最大 11 バイトを使用できますが、実際にはフィールドに 11 文字を格納できない場合があります。たとえば、英語以外の文字など、格納に 1 バイト以上かかるものもあるためです。

Oracle に指示したとおりにフィールドを定義することで、VARCHAR2(11 CHAR)各文字を格納するのに何バイトかかるかに関係なく、11 文字を格納するのに十分なスペースを使用できます。1 文字には最大 4 バイトが必要な場合があります。

于 2008-09-17T09:34:39.990 に答える
23

1 つには正確に 11 バイトのスペースがあり、もう一方には正確に 11 文字のスペースがあります。Unicode バリアントなどの一部の文字セットは、文字ごとに複数のバイトを使用する場合があるため、エンコーディングによっては、11 バイト フィールドに 11 文字未満のスペースがある場合があります。

http://www.joelonsoftware.com/articles/Unicode.htmlも参照してください。

于 2008-09-17T09:31:18.720 に答える
17

システム構成に応じて、BYTESで測定されるCHARのサイズは異なる場合があります。あなたの例では:

  1. フィールドを11バイトに制限
  2. フィールドを11CHARアクターに制限します


結論:1CHARは1BYTEと等しくありません。

于 2008-09-17T10:13:00.977 に答える
4

私は Oracle ユーザーではないのでわかりませんが、違いは Unicode (UTF-16/32) などのマルチバイト文字セットを使用する場合にあると思います。この場合、11 バイトは 11 文字未満になる可能性があります。

また、これらのフィールド タイプは、アクセント付きの文字または大文字と小文字に関して異なる方法で処理される場合があります。 .

于 2008-09-17T09:31:25.677 に答える