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バイトを格納することができない場合があります。英語以外の文字。
フィールドをVARCHAR2(11 CHAR)
として定義することにより、各フィールドを格納するのに必要なバイト数に関係なく、11文字を格納するのに十分なスペースを使用できることをOracleに伝えます。 1つの文字には最大4バイトが必要な場合があります。
1つには11バイトのスペースがあり、もう1つには11文字のスペースがあります。 Unicodeバリアントなどの一部の文字セットは、1文字につき1バイト以上を使用する場合があります。したがって、11バイトのフィールドには、エンコードに応じて11文字未満のスペースがあります。
こちらもご覧ください http://www.joelonsoftware.com/articles/Unicode.html
システム構成に応じて、BYTESで測定されるCHARのサイズは異なります。あなたの例では:
私はOracleユーザーではないのでわかりませんが、Unicode(UTF-16/32)などのマルチバイト文字セットを使用する場合に違いがあると思います。この場合、11バイトは11文字未満である可能性があります。
また、これらのフィールドタイプは、アクセント記号付きの文字または大文字と小文字の区別が異なる場合があります。たとえば、 'binaryField(ete)= "été"'は一致しませんが、 'charField(ete)= "été"'は(ここでもOracleについて不明) 。