charとvarcharの違いは気にするようなモノではない!!
いや、PHPじゃなくてDBな話なのですが。
みなさまご存じの通り、charは固定長であり空白でパットされた文字列で、
varcharは、制限付き可変長文字列ですね。
SQL は 2 つの主要な文字データ型を定義しています。character(n) と character varying(n) で、n は正の整数です。これらのデータ型は 2 つとも長さにして n 文字分の文字列を保存できます。超過している文字がすべてスペースの場合(この時は長さの限界で切り捨てられます)を除いて、上限を越えた文字列をこの種の列に保存しようとするとエラーになります。 (この一風変わった例外は SQL 標準で要求されています。もし宣言された上限よりも文字列が短いときは character の値はスペースでパッドされ、character varying の値は単により短く保存されます。
PostgreSQL 7.3.2 ユーザガイド 文字列データ型 より
で、今日、テーブル定義を行う際、charとvarcharどちらを選ぶのが正解か、という議論になりました。
しかし…
一応私はPostgreSQLでは
varchar = 文字数制限のあるtext
char = 文字数に足りない分に空白を詰めるvarchar
と、すべてtextをベースにしていると理解しているんですが、それは間違いない
ですよね?
世の中には、charのパフォーマンスを稼ぐためにvarcharと違う実装を用いるよ
うなデータベース(DB/2がそうらしいですが)というものがあるそうなので。
[pgsql-jp 18745] Re: char vs text vs varcharより
っつーことは、つまり、varchar = text+文字数制限で、
char = text+空白パッド+文字数制限ということになるわけで、
そうすると、一番いいのはtextという結論に!!
要するに内部的には、charもvarcharもtextもみんな一緒説…
ならば。今まで僕のやってきたテーブル設計とはなんだったのでしょう…
えーと…都道府県ならvarchar(20)でよかろう、とかやってたのに…
えー、この件に関して間違ってたら教えてください。
というか、DB設定に関して、詳しい方、是非ご教授を…
気になるリンク。
InterBase – BLOB, CHARとVARCHARの比較
初めての
断熱カーフィルム貼りつけ
Tweets on 2010-08-19
SWANS Airless-flight SA-402