MySQL の Varchar は、長さが最大のテキストを格納するために使用されるデータ型です。 65535文字 。テーブル内の varchar 列は次のとおりです。 可変長文字列 数値、文字、またはその両方を保持できます。このデータ型は、バージョン 5.0.3 より前では 255 文字しか保存できませんでしたが、このバージョン以降では、最大 65535 文字を保存できます。 MySQL に次のように保存できます。 1バイトまたは2バイト 長さのプレフィックスと実際のサイズ。
長さプレフィックスは、設定した最大サイズではなく、文字列値のバイト長を指定します。値に 255 バイトを超える必要がない場合、列には長さの接頭辞に 1 バイトを加えたものが使用されます。値に 255 バイトを超える必要がある場合、列では長さの接頭辞に 2 バイトを加えた値が使用されます。
VARCHAR の最大長 MySQL 最大行サイズは 65,535 バイトに制限されます。このサイズは、TEXT/BLOB 列および使用される文字セットを除くすべての列で共有されます。これは、列の合計が 65535 バイトを超えてはいけないことを意味します。
例を使ってそれを理解しましょう。
2 つのテーブルを作成し、Test1 と Test2 という名前を付けます。どちらのテーブルにも、T1 と T2 という名前の 2 つの列が含まれています。次のステートメントを実行してテーブルを作成します。 テスト1 ':
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
列の長さ T1 = 32765 + 2 バイト、および T2 = 32766 + 2 バイトが 65535 (32765+2+32766+2) に等しいため、上記のステートメントはテーブルを正常に作成しました。したがって、列の長さは varchar の最大行サイズ (65535) を満たします。
ここで、列のサイズが異なる場合に何が起こるかを見ていきます。 を超える varchar の最大サイズは 65535 です。以下のステートメントを実行して、列 T1 のサイズを増やしてテーブルを作成します。 テスト2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
上記のステートメントを実行すると、MySQL によってエラーが生成されます。これは、最大行サイズが 65,535 バイトを超えることができないことを意味します。いずれの場合も、増加するとステートメントは失敗し、MySQL はエラーを生成します。
別のケースでは、という名前のテーブルを作成したとします。 テスト3 以下のステートメントを使用します。
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
次に、以下のステートメントを使用してテーブルに値を挿入します。
INSERT INTO Test3(Name) VALUES ('Stephen');
次に、上記のステートメントを実行します。 MySQL では次のようなエラー メッセージが表示されます。 行 1 の列「名前」にはデータが長すぎます 。出力ではそれがより明確に説明されています。
MySQL VARCHAR とスペース
MySQL は、varchar 値を保存するときに、その値のスペースを埋め込みません。 MySQL は、varchar 値を格納または取得するときに、末尾のスペースも保持しました。次の例を通してそれを理解することができます。 挿入ステートメント に値を追加します 名前 表の列 テスト3 :
INSERT INTO Test3(Name) VALUES ('John ');
次に、SELECT ステートメントを実行して値を取得します。
SELECT Id, Name, length(Name) FROM Test3;
次の出力が得られます。カラムの長さは増加しないため、MySQL では長さのカウントに末尾のスペースが含まれます。
ただし、列の長さを超える末尾のスペースを含む varchar 値を挿入しようとすると、MySQL は 切り詰める 末尾のスペース。また、MySQL は 警告 。次の例では、これをより明確に説明しています。
INSERT INTO Test3(Name) VALUES ('Peter ');
上記のステートメントは、長さが次の値を挿入します。 六 名前欄に。値は引き続きカラムに挿入されますが、MySQL は値を追加する前に末尾のスペースを切り捨てます。以下のクエリを使用して確認すると、挿入ステートメントは正常に追加されましたが、次のような警告が表示されます。 行 1 の列 'name' のデータが切り捨てられました :
Char データ型と Varchar データ型の違い
char データ型と varchar データ型は両方とも次のとおりです。 ASCII文字 。これらはほぼ同じですが、データベースへのデータの保存と取得が異なります。次の表は、char データ型と varchar データ型の基本的な違いをまとめたものです。
チャー | VARCHAR |
---|---|
それは性格を表しています。 | 可変文字の略です。 |
テーブルの作成時に宣言した値を固定長で保存します。 | 値は、1 バイトまたは 2 バイトの長さのプレフィックスが付いた可変長文字列に格納されます。 |
このデータ型には、指定された長さを維持するために末尾のスペースを埋め込むことができます。 | このデータ型は、保存時にスペースを含む文字を埋め込むことはできません。 |
255 文字を超えることはできません。 | 最大 65535 文字を保持できます。 |
静的メモリ割り当てをサポートします。 | 動的メモリ割り当てをサポートします。 |