mysql文字列タイプ


文字列タイプ
文字列タイプとは、CHAR、VARCHAR、BINARY、VARBIINARY、BLOB、TEXT、ENUM、SETを指す.このセクションでは、これらのタイプがどのように動作するか、クエリーでこれらのタイプを使用する方法について説明します.
を選択します.
サイズ
用途
CHAR
0~255バイト
固定文字列
VARCHAR
0~65535バイト
長い文字列
TINYBLOB
0~255バイト
255文字以下のバイナリ文字列
TINYTEXT
0~255バイト
短いテキスト文字列
BLOB
0~65,535バイト
バイナリ形式の長いテキストデータ
TEXT
0~65,535バイト
ロングテキストデータ
MEDIUMBLOB
0~16 777,215バイト
バイナリ形式の中長テキストデータ
MEDIUMTEXT
0~16 777,215バイト
中長テキストデータ
LONGBLOB
0-4 294 967 295バイト
バイナリ形式の極大テキストデータ
LONGTEXT
0-4 294 967 295バイト
極大テキストデータ
CHARとVARCHARタイプは似ていますが、保存と取得の方法は異なります.最大長さや末尾スペースが保持されているかどうかなども異なります.ストレージまたは取得中に大文字と小文字の変換は行われません.
BINARYおよびVARBINAARYは、CHARおよびVARCHARと同様であり、バイナリ文字列ではなくバイナリ文字列を含むのとは異なる.すなわち、文字文字列ではなくバイト文字列が含まれています.これは、文字セットがなく、カラム値バイトに基づく数値値を並べ替えて比較していることを示します.
BLOBは、可変数のデータを格納できるバイナリオブジェクトです.4種類のBLOBタイプがあります:TINYBLOB、BLOB、MEDIUMBLOBとLONGBLOB.これらの違いは、格納可能なストレージ範囲が異なることです.
4種類のTEXTタイプがあります.TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXTです.対応する4種類のBLOBタイプは、格納できる最大長さが異なり、実際の状況に応じて選択できます.
データベースインスタンス操作charvarvhar:
mysql> create table t5 (
    -> n1 char(10),
    -> n2 varchar(10)
    -> );
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t5 values (' hello ',' hello ');
Query OK, 1 row affected (0.01 sec)
mysql> select concat('!',n1,'!'),concat('!',n2,'!') from t5;
+--------------------+--------------------+
| concat('!',n1,'!') | concat('!',n2,'!') |
+--------------------+--------------------+
| ! hello!           | ! hello !          |
+--------------------+--------------------+
1 row in set (0.00 sec)

CHAR(M)、VARCHR(M)の違い
CHAR(M)で定義された列の長さは固定されており、Mの値は0~255の間とすることができ、CHAR値を保存すると、その右側にスペースを埋めて指定された長さにすることができます.CHAR値を取得すると、末尾のスペースが削除されます.ストレージまたは取得中に大文字と小文字の変換は行われません.CHARは定長データを格納するのに便利で、CHARフィールドのインデックス効率レベルが高く、例えばchar(10)を定義すると、格納したデータが10バイトに達したかどうかにかかわらず、10バイトの空間を占め、不足した自動はスペースで埋め込まれます.
VARCHAR(M)で定義される列の長さは可変長文字列であり、M値は0~65535の間であってもよい(VARCHARの最大有効長は最大行サイズと使用する文字セットで決定される.全体の最大長は65532バイト).VARCHAR値の保存に必要な文字数のみを保存し、長さを記録するために1バイト追加します(カラム宣言の長さが255を超える場合は2バイト使用します).VARCHAR値保存時にパディングしない.値が保存され、取得されると、末尾のスペースは保持され、標準SQLに準拠します.varcharは長くなったデータを格納するが,格納効率はCHARほど高くない.フィールドの可能な値が一定長でない場合、10文字を超えることはできないことを知っています.VARCHAR(10)として定義するのが最もお得です.VARCHARタイプの実際の長さは、その値の実際の長さ+1である.なぜ"+1"?このバイトは、実際に使用された長さを保存するために使用されます.空間的にはvarcharが適当です.効率的にはcharが適切であり,実際の状況に基づいてトレードオフポイントを見つけることが肝心である.
CHARとVARCHARの最大の違いは、固定長さであり、可変長さである.可変長であるため、実際に格納する場合は、実際の文字列に1つの記録文字列の長さを加えたバイト(255を超えると2バイト必要)である.CHARまたはVARCHARカラムに割り当てられた値がカラムの最大長を超える場合、値は適切に切り捨てられます.カットされた文字がスペースでない場合、警告が発生します.スペース以外の文字を切り取ると、警告ではなくエラーが発生し、厳格なSQLモードで値の挿入を無効にします.
文字列textインスタンス:
mysql> create table t6 (
    -> n1 text
    -> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into t6 values ("sdasadsadsaaaaadassd")
    -> ;
Query OK, 1 row affected (0.01 sec)
mysql> select * from t6;
+----------------------+
| n1                   |
+----------------------+
| sdasadsadsaaaaadassd |
+----------------------+
1 row in set (0.00 sec)

注意:charやvarcharとは異なり、textにはデフォルト値は使用できません.最大長は2の16乗-1です.
ENUMタイプ
ENUMは、通常、テーブル作成時のカラム仕様の説明で明確に列挙された許容値リストから選択される文字列オブジェクトです.
以下の場合、値は空白列("")またはNULLであってもよい.
無効な値をENUM(許可値リストにない文字列)に挿入すると、空の文字列が特殊なエラー値として挿入されます.実際、この文字列は「通常」の空の文字列とは異なり、この文字列には数値インデックス値が0であるためです.詳細は後述する.
ENUMがNULLとして宣言された場合、NULLもカラムの正当な値であり、カラムのデフォルト値もNULLになります.ENUMがNOT NULLとして宣言された場合、カラムのデフォルト値はリストで許可されている値の最初のメンバーになります.
mysql> create table t7 (
    -> gender enum (' ',' ')
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t7 values (' ');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t7 values (' ');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t7 values (' ');
ERROR 1265 (01000): Data truncated for column 'gender' at row 1
mysql> select * from t7;
+--------+
| gender |
+--------+
|       |
|       |
+--------+
2 rows in set (0.00 sec)