char 型 / varchar 型 / nvarchar 型
char 型
* 固定長 * 最大長は8000バイト
デメリット
* 列の長さより短い値を格納した場合、足りない分まで空白が埋め込まれる (バグの原因になる。Trim()などで回避。) 例:char(10) と定義され、"music" というデータをこの列に格納する場合 → "music_____" として格納("_" は空白)
varchar 型 (varchar2)
* 可変長 * 最大長は2^31バイト (SQL Server2000までは、8000バイト)
デメリット
* 更新後の文字列が更新前の文字列よりも長い場合、 更新前に使っていたディスク領域に文字列を格納することができないため、 再度記憶領域のサイズを確保する処理が行われる事がある →ディスクI/Oを増加することになり、パフォーマンスの低下を招く
nvarchar 型
* Unicode対応 * Unicode 定数は先頭に N を付けて指定する(例「N'Music'」)http://prg.seesaa.net/article/24935500.html
http://blogs.msdn.com/b/jpsql/archive/2012/05/22/nvarchar-nchar.aspx
デメリット
* 全ての文字を同じバイトで格納 →半角全角の区別はないため、格納に多くの記憶域を必要とするhttp://d.hatena.ne.jp/fujid/20060510/1147263152
使い分け
char型
* 最大文字数が決めやすい場合(例「郵便番号欄」など) →固定長のchar型が適する
varchar型
* 文字列を格納するのに必要なディスク容量だけを考えた場合(例「備考欄」など) →varchar型の方がコンパクトに格納できる分、優れている
nvarchar型
* 日本語(Unicode)などが含まれる場合
参考文献
全般
http://itpro.nikkeibp.co.jp/article/COLUMN/20060221/230236/?ST=systemSQL Server(char 型 / varchar 型)
http://technet.microsoft.com/ja-jp/library/ms176089.aspxhttp://technet.microsoft.com/ja-jp/library/ms175055.aspx
http://www.confrage.com/database/sqlserver/basis/char_varchar/char_varchar.html