charとvarcharの違い

3079 ワード

char(13)の長さは「www.jb 51」のように固定する.Net′記憶に必要な空間12文字varchar(13)は、′www.jb 51のように可変長である.Net'には記憶領域13文字が必要で、charの長さは固定されていることがわかります.あなたが記憶しているデータがいくらであれ、彼は固定されている長さです.varcharは可変長ですが、位置を格納するために全長に1文字を追加します.したがって,実際のアプリケーションではユーザは自分のデータ型に基づいて行うことができる.charとvarcharの速度の違いを見てみましょう. 
 
   
mysal>create tabe ab(v varchar(4),c char(4)); 
query ok ,0 rows affected(0.02 sec) 
mysql>insert into abc values('ab ','ab ') 
query ok ,1 row affected(0.00 sec); 
mysql->select concat(v ,'+') ,concat(c ,'+') form abc 
ab + | ab+ 
1rows in set (0.00 sec) 

以上から分かるように,何らかの理由でcharが長さを固定しているため,処理速度ではvarcharよりもはるかに高速であるが,対費記憶空間であるため記憶には大きくないが,速度に要求がある場合はcharタイプを用いることができ,逆にvarcharタイプを用いて実例することができる. 
注記:
char文字タイプを使用する場合、コンテンツの後ろにスペースがある場合は関連処理をしなければなりません.スペースは自動的に削除されます. 
建意:
myisamストレージエンジンは、可変長のデータ列の代わりに固定長を使用することを推奨します. 
memoryストレージエンジンは現在、固定データ行ストレージを使用しているので、char varchar列を使用しても大丈夫です.
innodbストレージエンジンはvarcharタイプを使用することを意図しています
以下は他のネットユーザーの補足です.
 
charは固定長のタイプで、varcharは可変長のタイプです
char(M)タイプのデータ列では、各値がMバイトを占有し、ある長さがMより小さい場合、MySQLはその右側にスペース文字で補完します.(検索操作で埋めたスペース文字は削除されます)varchar(M)タイプのデータ列では、各値は、ちょうど十分なバイトに、その長さを記録するためのバイト(すなわち、全長L+1バイト)を加えるだけである.
MySQLでカラムタイプ変換が必要かどうかを判断するためのルール
 
1.1つのデータテーブルにおいて、各データ列の長いが一定であれば、各データ行の長いも固定される.
2.データテーブルに1つのデータ列の長いが可変である限り、各データ行の長いは可変である.
3、あるデータテーブル内のデータ行の長さが可変である場合、MySQLは記憶領域を節約するために、このデータテーブル内の固定長タイプのデータ列を対応する可変長タイプに変換する.
例外:4文字未満のcharデータ列はvarcharタイプに変換されません
MyISAMテーブルについてはなるべくCharを使い、常に修正が必要で断片化しやすいmyisamとisamデータテーブルについてはなおさらです.
ディスク容量を消費するという欠点があります

InnoDBテーブルでは、固定長のデータ行と可変長のデータ行を区別しないデータ行がデータ行内部に格納されているため(すべてのデータ行に1つのヘッダ部分が共用されており、このヘッダ部分には各関連データ列へのポインタが格納されている)、charクラスを使用するとvarcharタイプを使用するよりも良いとは限らない.実際、charタイプは通常varcharタイプよりも多くのスペースを占有するため、スペース占有量の減少とディスクi/oの減少の観点からvarcharタイプの使用がかえって有利である. 
記事2:
文字は最も一般的なもののはずですが、oracleにvarchar 2があるなど、データベースごとに異なるようです.しかしmysqlが一番多いのはcharとvarcharに集中しているようです. 
違いを言う.charは固定長であり、varcharは特定の長さに基づいて記憶空間を使用します.例えばchar(255)とvarchar(255)は、文字列「hello world」を格納する場合、charは255個の空間でその11文字を格納しますが、varcharは255個は使用しません.彼はまず長さを計算した後、11個だけ計算した文字列長情報を加えて、一般的に1-2個のbyteで、varcharは長さが不確定な場合、格納空間を大幅に減少させます. 
このようにvarcharはcharよりずっと頭がいいように見えますが、charは武を使う場所がありますか?やはり多くのメリットがあります.
 
一、短い情報を格納する、例えばゲート番号101201......このような短い情報はcharを使うべきで、varcharはbyteを占めて情報の長さを格納するため、もともと記憶する今の損得を節約しようとした. 
二、固定長さの.例えばuuidをプライマリ・キーとして使用する場合はcharの方が適切であるはずです.彼は長さを固定しているので、varcharダイナミックは長さの特性によって消え、長さ情報を占めなければならない. 
三、非常に頻繁に変化するcolumn.varcharはストレージのたびに追加の計算を行い、長さを得るなどの作業を行うため、非常に頻繁に変更される場合は計算に多くの精力を費やす必要がありますが、charには必要ありません. 
もう一つのvarcharに関する問題は、varcharが自動的に記憶空間に適応できる以上、私のvarchar(8)とvarchar(255)の記憶は同じであるべきで、テーブルの設計のたびに大きな方向に行って、後で面倒にならないようにすることです.この考えは正しいですか.答えは否定的だ.mysqlはテーブル情報をメモリに格納します(クエリーが初めてでキャッシュされ、linuxでは明らかですが、windowsではないようで、なぜか分かりません)、このときメモリの申請は固定長さで来ていますが、varcharが大きいと問題があります.だからやはり必要に応じて請求すべきだ. 
まとめ:DZのデータテーブルをよく見ると、定長のフィールドは基本的にcharで...