varchar
はtext
が登場する前の残党ですか、それともwantを使用してvarchar
を使用するユースケースはありますか? (または、char
そのことについて..)
(私はPostgresとMySQL(MyISAM)を毎日使用しているので、それらに最も興味がありますが、他のデータベースの回答ももちろん大歓迎です。^ _-)
text
列は非標準で実装固有です。多くの場合、データベースに応じて、次の制限の1つ以上の組み合わせがある場合があります:not indexable、not searchableおよび並べ替え不可。
これらすべてのタイプ 同じCデータ構造を使用して内部的に保存されます。 。
text
列 _BLOB
の特殊バージョンであり、索引付けに制限があります。
これらの2つの例は、他のSQL RDBMSシステムに外挿することができ、どちらのタイプを選択するかを理解するのに十分な理由になります。
暗黙的に明確にするために、
TEXT
は独自仕様で非標準であるため、使用しないでください。あなたがそれに対して書いたSQL
は、移植性がなく、将来的に問題を引き起こすことが保証されます。 ANSI標準 の一部であるタイプのみを使用します。
CHAR
を使用します。VARCHAR
を使用します。VARCHAR
が提供できる以上のストレージが必要な場合は、CLOB
with UTF-8
エンコーディングまたは同等の標準タイプ。TEXT
は非標準なので使用してください。text
、varchar
およびchar
はすべて、さまざまな理由で使用されます。もちろん、実装には違いがあります(それらが占めるサイズなど)が、使用法とintentの考慮事項もあります。どのタイプを使用するかによっても、そこに格納されるデータの種類がわかります(またはeverythingにはすべてtext
を使用します)。固定長のものがある場合は、char
を使用します。上限が明確に定義された可変長の場合は、varchar
を使用します。それがあなたがほとんど制御できない大きなテキストチャンクであるならば、text
はおそらくあなたの最善の策でしょう。
データベースはパフォーマンスに強く関係しています-速度およびストレージの最小化。コンピュータの世界の他のほとんどの部分では、文字列に含まれる文字の数に煩わされることはありません。それは一つかもしれないし、百科事典の内容全体かもしれない。それはすべて単なる文字列です。実際、多くの言語は文字列であるか数値であるかを気にしません。
しかし、コンピューターが高速になり、より多くのメモリを獲得すると、人々はより多くのデータをデータベースに入れ、より洗練されたクエリを実行します。データベースの場合、CPUとメモリは、64Kbのメインメモリと10Mbのハードドライブ(mainframeコンピュータ上)の時代と同じように、今日も制限されています。
固定長のバイトは、可変長の数値よりも扱いがはるかに簡単です。 10バイトは、1,000,000よりもはるかに扱いやすいです。したがって、データベースでは、テラバイト単位のデータからマイクロ秒単位でギガバイトの結果を得ることができるように、手掛かりを与えることを求めています。データベースをそれほど使用しない場合は、データベースが提供する速度は必要なく、不必要な質問に悩まされることになります。ただし、パフォーマンスが必要な場合は、ヒントを提供してください。
他の回答で述べたように、常に特定の数の文字を使用する場合はchar
を使用し、長さが変化する可能性があるが長すぎない場合はvarchar
を使用します(my guessは、ほとんどのDBがchar
またはtext
としてサイズに応じて処理します)、およびtext
(任意の長さの場合)。 SQLがtext
列を使用しようとする場合、何らかの方法で要約してchar
または小さなvarchar
列に配置し、where
's and order by
はその上です。もちろん、それはパフォーマンスが重要な場合のみです。