10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


11.4.1 charおよびvarchar型

字符型とVARCHAR型は似ていますが,格納および取得方法が異なります。また,最大長と,末尾のスペ,スが保持されるかどうかという点でも異なります。

字符型とVARCHAR型には,格納する最大文字数を表す長さが宣言されています。たとえば,CHAR (30)には最大30文字を格納できます。

字符カラムの長さは,テブルを作成したときに宣言した長さに修正されます。この長さには,0から255までの任意の値を指定できます。字符値は格納されると,指定された長さになるように右側がスペスで埋められます。PAD_CHAR_TO_FULL_LENGTHSQLモドが有効になっていないかぎり,字符値が取り出されるときに,末尾のスペスが削除されます。

VARCHARカラム内の値は可変長の文字列です。長さは0から65,535までの値で指定できます。VARCHARカラムの有効な最大長は,最大行サイズ(65535バイト,すべてのカラムで共有される)と使用される文字セットによって決まります。セクションd.10.4 "テブルカラム数と行サズの制限"を参照してください。

字符とは対照的に,VARCHAR値は,1バ2バ。長さプリフィクスは、値に含まれるバ以及ト数を示します。255年バイト以下の値を格納するカラムでは1バイト長のプリフィクスを使用し,255バイトよりも大きい値を格納するカラムでは2バイト長のプリフィクスを使用します。

厳密なSQLモドが有効でない場合に字符またはVARCHARカラムにその最大長を超える値を割り当てると,その値はカラムの最大長に合わせて切り捨てられ,警告メッセージが表示されます。スペース以外の文字の切り捨てに関しては,厳密なSQLモードを使用することで,警告ではなくエラーを発生させて,その値の挿入を抑制できます。セクション5.1.7 "サバSQLモド"を参照してください。

VARCHARカラムの場合,使用しているSQLモードに関係なく,カラム長を超える末尾のスペースは挿入前に切り捨てられ,警告メッセージが表示されます。字符カラムの場合、SQLモードに関係なく,超過した末尾のスペースは通知なしに挿入される値から切り捨てられます。

VARCHAR値は格納されるときに埋められません。標準SQLに従い,値を格納し取り出すときに末尾のスペスは保持されます。

次の表は,CHAR (4)カラムとVARCHAR (4)カラムにさまざまな文字列値を格納した結果を表示して,字符VARCHARの違いを示しています(カラムには.latin1などのシングルバ和ト文字セットを使用するものとします)。

CHAR (4) 必要なストレジ VARCHAR (4) 必要なストレジ
' ' 4バ邮箱ト 1バ邮箱ト
“ab” “ab” 4バ邮箱ト “ab” 3バ邮箱ト
“abcd” “abcd” 4バ邮箱ト “abcd” 5バ邮箱ト
“abcdefgh” “abcd” 4バ邮箱ト “abcd” 5バ邮箱ト

テブルの最終行に格納済みとして示されている値は,厳密モドを使用していないときにだけ当てはまります。MySQLが厳密モドで実行されている場合,カラム長を超える値は格納されず,エラが発生します。

所定の値がCHAR (4)およびVARCHAR (4)カラムに格納されると,取り出しのときに末尾のスペスが字符カラムから削除されるので,カラムから取り出された値は必ずしも同じではありません。次の例はこの違いを示しています。

CREATE TABLE vc (v VARCHAR(4), c CHAR(4));查询OK, 0行影响(0.01秒)mysql> INSERT INTO vc VALUES ('ab ', 'ab ');查询OK, 1 row affected (0.00 sec) mysql> SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;+---------------------+---------------------+ | CONCAT (' (' v ') ') | CONCAT (' (', c , ')') | +---------------------+---------------------+ | ( ab) | (ab ) | +---------------------+---------------------+ 1行集(0.06秒)

字符カラムとVARCHARカラムの値は,そのカラムに割り当てられた文字セットの照合順序に従ってソトおよび比較されます。

MySQLのすべての照合順序は,PADSPACE型のものです。これは,MySQL内のすべての字符VARCHAR,および文本値が,末尾のスペスに関係なく比較されることを意味します。このコンテキストでの比較には,末尾のスペ就像パタンマッチング演算子は含まれません。例:

CREATE TABLE names (myname CHAR(10));查询OK, 0行影响(0.03秒)mysql> INSERT INTO names VALUES ('Monty');查询OK, 1 row affected (0.00 sec) mysql> SELECT myname = 'Monty', myname = 'Monty';+------------------+--------------------+ | 的名字=“蒙蒂”|的名字= '蒙蒂  ' | +------------------+--------------------+ | 1 | 1  | +------------------+--------------------+ 1行组(0.00秒)mysql >选择名字像蒙蒂,名字像蒙蒂的名字;+---------------------+-----------------------+ | 名字就像“蒙蒂”|的名字像蒙蒂  ' | +---------------------+-----------------------+ | 1 | 0  | +---------------------+-----------------------+ 1行集(0.00秒)

これはMySQLのすべてのバージョンに当てはまり,サーバーのSQLモードの影響は受けません。

注記

MySQLの文字セットおよび照合順序の詳細は,セクション10.1 "文字セットのサポト"を参照してください。ストレジ要件の追加情報にいては,セクション11.7 "デタ型のストレジ要件"を参照してください。

末尾の埋め込み文字が取り除かれたり,比較で無視されたりする場合では,一意の値を必要とするインデックスがカラムに含まれていれば,末尾の埋め込み文字の個数だけが異なるカラム値への挿入は,重複キーエラーになります。たとえば,テブルに“一个”が含まれている場合,“一个”を格納しようとすると,重複キエラが発生します。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb