あるvarchar
だけで残りは以前からtext
周囲に来た、またはあなたが考えケースが使用されたい使用するにはvarchar
?(またはchar
そのことについて..)
(私は毎日PostgresとMySQL(MyISAM)を使用しているので、それらは私が最も興味を持っているものですが、他のデータベースへの回答はもちろん歓迎です。^ _-)
あるvarchar
だけで残りは以前からtext
周囲に来た、またはあなたが考えケースが使用されたい使用するにはvarchar
?(またはchar
そのことについて..)
(私は毎日PostgresとMySQL(MyISAM)を使用しているので、それらは私が最も興味を持っているものですが、他のデータベースへの回答はもちろん歓迎です。^ _-)
回答:
text
列は非標準であり、実装に固有です。多くの場合、データベースに応じて、彼らは、以下の制限のうちの1つ以上の組み合わせを有していてもよい:刃先交換式ではない、検索できないとソート可能ではありません。
これらのタイプはすべて、同じCデータ構造を使用して内部的に保存されます。。
このtext
列は特別なバージョンでBLOB
あり、インデックス作成に制限があります。
これらの2つの例は、他のSQL RDBMSシステムに外挿することができ、あるタイプを他のタイプよりも選択するタイミングを理解するのに十分な理由になるはずです。
暗黙的に明確にするために、
TEXT
独自仕様で非標準なので使用しないでください。どれでもSQL
あなたがそれに対して書き込みをしますないポータブルで、あなたの将来に問題を引き起こすことが保証されます。ANSI標準の一部であるタイプのみを使用してください。
CHAR
すべてのエントリに一定の文字数があることがわかっている場合に使用します。VARCHAR
すべてのエントリに可変数の文字がある場合に使用します。VARCHAR
、提供することができCLOB
てUTF-8
エンコーディングまたは同等の標準タイプを。TEXT
、それは非標準であるとして。non standard and implementation specific
、not indexable, not searchable and not sortable
私は気づきませんでした。私は印象の下にあったtext
た標準化しました。
text
、文字型として何かを見つけることはないと思います。私は何も見ませんでした、いくつかのベンダーはそれlong char
を呼んでいます、そして、それは基本的に、それに接続されたエンコーディングを持つBLOBです。
TEXT
」と結論づける(Postgres環境の場合)信頼できるリソースがたくさんあります。別のデータベースに移行する場合、特にpostgresの無制限VARCHAR
(TOASTにより、MySQLのような行制限がない)が無制限VARCHAR
に変換されない可能性があることを考慮する必要があるため、それはほとんど問題になりませんとにかく他のデータベース。
text
、varchar
およびchar
すべて異なる理由で使用されます。もちろん、実装の違い(それらが占めるサイズなど)がありますが、使用法と意図の考慮事項もあります。使用するタイプは、そこに格納されるデータの種類に関する情報も提供します(または、すべてに使用text
します)。何かが固定長の場合、を使用しますchar
。上限が明確に定義された可変長の場合は、を使用しますvarchar
。それがあなたがほとんど制御できないテキストの大きな塊であるtext
なら、おそらくあなたの最善の策でしょう。
char
、varchar
、とは、text
すべて同じ格納するために設計されているタイプのデータを。したがって、ここでの両方の答えは、境界チェックに関するものです。効率の違いがある場合、それらは何ですか? なぜvarchar
over を使用するのtext
ですか?
データベースは、パフォーマンス、つまり速度とストレージの最小化に大きな関心を寄せています。コンピュータの世界の他のほとんどの部分では、文字列に含まれる文字数について気にすることはありません。1つでも、百科事典の内容全体でもかまいません。それはすべて単なる文字列です。実際、多くの言語は文字列か数字かを気にしません。
しかし、コンピューターがより高速になり、より多くのメモリを獲得するにつれて、人々はより多くのデータをデータベースに入れて、よりクエリを実行します。データベースの場合、CPUとメモリは、64 KBのメインメモリと10 MBのハードドライブ(メインフレームコンピューター上)の時代と同様に、今日では制限されています。
固定長のバイトは、可変長の数字よりもはるかに扱いやすいです。10バイトは1,000,000よりもはるかに簡単に処理できます。したがって、データベースでは、テラバイト単位のデータからマイクロ秒単位で数ギガバイトの結果を得ることができるように、データベースに手がかりを与えたいと考えています。データベースをそれほど熱心に使用していない場合、データベースが提供する速度は必要なく、不必要な質問に悩まされます。ただし、パフォーマンスが必要な場合は、喜んでヒントを提供してください。
他の回答で述べたように、使用することは、char
それは常に、特定の文字数を使用した場合varchar
の長さは変化することができますが、それが大きくなりすぎていない場合は(私の推測ではあるほとんどのDBのように扱うことをchar
やtext
サイズに応じて)、およびtext
それならば長さは任意です。あなたのSQLを使用しようとする場合はtext
、列を、それが何らかの形でそれを要約し、それを置くために最善であるかもしれないchar
か、小さなvarchar
、列、そしてやるwhere
のをしてorder by
'は上です。もちろん、それはパフォーマンスがあなたにとって重要な場合のみです。
text
推奨されていません。また、データの保存場所とそのためのアクセス方法に関連する使用上の考慮事項もあります。