web-dev-qa-db-ja.com

列データ型のBYTEとCHARの違い

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
)
157
Guido

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

フィールドをVARCHAR2(11 BYTE)として定義すると、Oracleはストレージに最大11バイトを使用できますが、実際には11バイトを格納することができない場合があります。英語以外の文字。

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

249
David Sykes

1つには11バイトのスペースがあり、もう1つには11文字のスペースがあります。 Unicodeバリアントなどの一部の文字セットは、1文字につき1バイト以上を使用する場合があります。したがって、11バイトのフィールドには、エンコードに応じて11文字未満のスペースがあります。

こちらもご覧ください http://www.joelonsoftware.com/articles/Unicode.html

20

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

  1. フィールドを11に制限 キャラクター
  2.  



16
user15453

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

また、これらのフィールドタイプは、アクセント記号付きの文字または大文字と小文字の区別が異なる場合があります。たとえば、 'binaryField(ete)= "été"'は一致しませんが、 'charField(ete)= "été"'は(ここでもOracleについて不明) 。

3
Seldaek