序文
✨Xiao KのMySQL コラムへようこそ。このセクションでは MySQL 文字列 | バイナリ型共有について説明します✨
5弦タイプ
string 型は文字列データを格納するために使用され、画像や音声のバイナリ データを格納することもできます。文字列では、大文字と小文字を区別するか区別しない文字列比較が可能で、正規表現による一致検索も実行できます。
MySQL の文字列データ型を次の表に示します。M
括弧内の表現でその長さを指定できます。
型名 | 説明する | 長さの範囲 | 使用済みのストレージスペース |
---|---|---|---|
魅力) | 固定長 | 0<=M<=255 | Mバイト |
VARCHAR(M) | 可変長文字列 | 0<=M<=65535 | M+1バイト |
小さなテキスト | 非常に小さな文字列 | 0<=L<=255 | L+1バイト |
文章 | 小さな紐 | 0<=L<=65535 | L+2バイト |
メディアテキスト | 中くらいのサイズの紐 | 0<=L<=16777215 | L+3バイト |
長文 | 大きな文字列 | 0<=L<=4294967295 | L+4バイト |
ENUM | 列挙型。列挙文字列値を 1 つだけ持つことができます。 | 0<=L<=65535 | 列挙値の数に応じて 1 バイトまたは 2 バイト (最大は 65535) |
セット | 文字列のコレクション、文字列オブジェクトには 0 個以上の SET メンバーを含めることができます | 0<=L<=64 | セットメンバーの数に応じて、1、2、3、4、または 8 バイト (最大 64 メンバー) |
CHAR 型と VARCHAR 型
CHAR 型と VARCHAR 型はどちらも、比較的短い文字列を格納できます。
タイプ | 特徴 | 長さ | 長さの範囲 | 収納スペースを取る |
---|---|---|---|---|
魅力) | 固定長 | M | 0<=M<=255 | Mバイト |
VARCHAR(M) | 可変長 | M | 0<=M<=65535 | (実際の長さ + 1/2) バイト |
CHAR型:
-
CHAR(M)は固定長の文字列であり、文字列の長さは定義時に指定されます。指定しない場合は、デフォルトで 1 文字が使用されます。
-
実際のデータ長が保存時に宣言したCHAR型の長さよりも小さい場合は、
右侧填充空格
指定した長さになります。CHAR 値を取得する場合、末尾のスペースは削除されます。 -
CHAR 型フィールドを定義する場合、宣言されたフィールド長は、CHAR 型フィールドが占有する記憶領域のバイト数です。
CREATE TABLE test_char
(
f1 CHAR,
f2 CHAR(5)
);
DESC test_char;
INSERT INTO test_char(f1) VALUES('h');
#Data too long for column 'f1' at row 1
INSERT INTO test_char(f1) VALUES('he');
INSERT INTO test_char(f1) VALUES('你');
INSERT INTO test_char(f2) VALUES('C语言');
#Data too long for column 'f2' at row 1
INSERT INTO test_char(f2) VALUES('C语言Plus');
#测试在右侧填充的空格,会在查询的时候去掉的情况
SELECT CONCAT(f2,'***') FROM test_char;
#注意:自己插入的空格也会被去掉
INSERT INTO test_char(f2) VALUES('fk ');
SELECT * FROM test_char;
VARCHAR 型:
-
VARCHAR(M) が定義されている場合は、長さ M を指定する必要があります。指定しないとエラーが報告されます。
-
VARCHAR(M) は、M 文字を格納でき、実際に占有されるスペースは文字列の実際の長さに 1 または 2 を加えたものであることを意味します。
-
VARCHAR 値の保存および取得時に末尾のスペースが保持されます。
#错误,没有指定长度
CREATE TABLE test_varchar
(
name VARCHAR
);
CREATE TABLE test_varchar
(
name VARCHAR(5)
);
INSERT INTO test_varchar VALUES('星星'),('太阳月亮');
#Data too long forcolumn 'NAME' at row 1
INSERT INTO test_varchar VALUES('星星太阳月亮');
テキストタイプ
TEXT は、記事の内容やコメントなどのテキスト タイプの文字列を保存するために使用されます。TEXT 列の値を保存またはクエリするときに、末尾のスペースは削除されません。
TEXT タイプには、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT の 4 種類があります。TEXT型ごとに記憶容量とデータ長が異なります。
TEXT型フィールドにデータを挿入する場合、実際の長さに応じてシステムが自動的に格納するため、事前に長さを定義する必要はありません。
タイプ | 説明する | サイズ (バイト) |
---|---|---|
小さなテキスト | 小さな文字 | 0<=L<=255 |
文章 | プレーンテキスト | 0<=L<=65535 |
メディアテキスト | 中程度のテキスト | 0<=L<=16777215 |
長文 | 長い文章 | 0<=L<=4294967295 (4GB 文字に相当) |
TEXT テキスト型は比較的大きなテキストセグメントを格納できますが、検索速度が若干遅いため、コンテンツが特に大きくない場合は、代わりに CHAR、VARCHAR を使用することをお勧めします。TEXT 型のデフォルト値も追加する必要はなく、追加しても無駄です。
ENUMタイプ
ENUM型は列挙型とも呼ばれ、定義フィールドでENUM型の値の範囲を指定する必要があります。フィールド値を設定する場合、ENUM 型ではメンバーから 1 つの値のみを選択でき、一度に複数の値を選択できません。作成されたメンバーにスペースが含まれている場合、末尾のスペースは自動的に削除されます。
タイプ | 長さの範囲 | 収納スペースを取る |
---|---|---|
ENUM | 1<=L<=65535 | 1または2バイト |
- ENUM 値は内部的に整数として表され、各列挙値にはインデックス値があります。
- リスト値で許可されるメンバー値は、MySQL が格納するインデックス番号である 1 から番号が付けられ、列挙には最大 65535 個の要素を含めることができます。
ENUM 値は列インデックス順に並べ替えられ、空の文字列は null 以外の文字列の前に並べ替えられ、NULL 値は他のすべての列挙値の前に並べ替えられます。
ヒント: ENUM 列には常にデフォルト値があります。ENUM カラムが NULL として宣言されている場合、NULL 値はカラムの有効な値であり、デフォルト値は NULL です。ENUM 列が NOT NULL として宣言されている場合、そのデフォルト値は、許可される値のリストの最初の要素になります。
- enum フィールドのすべての値を表示する
SELECT
column_type
FROM
information_schema. COLUMNS
WHERE
#TABLE_SCHEMA = "test" AND
DATA_TYPE = 'enum'
AND table_name="test_enum"
AND column_name="ch";
- テスト
CREATE TABLE test_enum
(
gender ENUM('男','女','unknown')
);
INSERT INTO test_enum VALUES('男');
#Data truncated for column 'ch' at row 1
INSERT INTO test_enum VALUES('中');
#可以使用索引来插入枚举元素(注意:索引从1开始)
INSERT INTO test_enum VALUES(1),('2');
#当enum字段没有申明为NOT NULL时,插入NULL也是合法的
INSERT INTO test_enum VALUES(NULL);
SELECT * FROM test_enum;
セットタイプ
SET は文字列オブジェクトで、0 個以上の値を持つことができ、SET 列には最大 64 個のメンバーを含めることができ、値はテーブルの作成時に指定された値の列です。
メンバーの範囲 | 使用済みのストレージスペース |
---|---|
1<=L<=8 | 1バイト |
9<=L<=16 | 2バイト |
17<=L<=24 | 3バイト |
25<=L<=32 | 4バイト |
33<=L<=64 | 8バイト |
-
ENUM 型と同様に、SET 値は内部的に整数として表され、リスト内の各値にはインデックス番号があります。SET メンバー値の末尾のスペースは、テーブルの作成時に自動的に削除されます。
-
ただし、ENUM 型のフィールドは、ENUM 型とは異なり、定義された列の値から挿入する値しか選択できませんが、SET 型のカラムは、定義された列の値から複数の文字の組み合わせを選択できます。
ヒント: SET フィールドに挿入されたカラム値が重複している場合、MySQL は重複した値を自動的に削除します。SET フィールドに挿入された値の順序は重要ではなく、MySQL は、重複した値を定義された順序で表示します。それらはデータベースに保存されます。
テスト
CREATE TABLE test_set
(
hobby SET('吃饭','睡觉','写Bug')
);
INSERT INTO test_set VALUES('吃饭');
INSERT INTO test_set VALUES('吃饭,睡觉');
#重复插入时,会自动删除重复数据
INSERT INTO test_set VALUES('吃饭,睡觉,吃饭');
#插入的值在set中不存在时,会报错
INSERT INTO test_set VALUES('吃饭,睡觉,花钱');
SELECT * FROM test_set;
6 つのバイナリ型
MySQL のバイナリ文字列タイプは主に、画像、オーディオ、ビデオ、その他のバイナリ データなどのバイナリ データを格納します。
BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB が含まれます。
次の表は、MySQL のバイナリ データ型をリストしたもので、M
括弧内の表現でその長さを指定できます。
型名 | 説明する | サイズ (バイト) |
---|---|---|
ビット(M) | ビットフィールド型 | 約(M+7)/8バイト |
バイナリ(男) | 固定長バイナリ文字列 | Mバイト |
ヴァービナリー(男) | 可変長のバイナリ文字列 | M+1バイト |
タイニーブロブ(M) | 非常に小さな塊 | L+1 バイト、ここで L<2^8 |
ブロブ(M) | 小さなBLOB | L+2 バイト、ここで L<2^16 |
ミディアムブロブ(M) | 中型BLOB | L+3 バイト、ここで L<2^24 |
肺ブロブ (M) | 非常に大きな塊 | L+4 バイト、ここで L<2^32 |
ビットタイプ
ビットフィールドタイプ。M は、1 ~ 64 の範囲の各値の桁数を表します。M を省略した場合、デフォルト値は 1 です。BIT(M) 列に割り当てられた値が M ビット長未満の場合、値の左側に 0 が埋め込まれます。たとえば、値 b'101' を BIT(6) 列に割り当てると、b'000101' を割り当てるのと同じ効果が得られます。
BIT データ型は、ビット フィールド値を格納するために使用されます。たとえば、データ 13 をバイナリ形式で格納する場合、13 のバイナリ形式は 1101 です。この場合、少なくとも 4 ビットの BIT 型、つまり列型が必要です。 BIT(4) として定義できます。バイナリ 1111 より大きいデータは、BIT(4) タイプのフィールドに挿入できません。
ヒント:デフォルトでは、MySQL はカラムの許容範囲を超える値を挿入できないため、データを挿入するときは、挿入された値が指定された範囲内であることを確認してください。
BINARY 型と VARBINARY 型
BINARY 型と VARBINARY 型は、バイナリ バイト文字列が含まれることを除けば、CHAR と VARCHAR に似ています。使用される構文形式は次のとおりです。
列名 BINARY(M) または VARBINARY(M)
BINARY 型の長さは固定であり、長さを指定した後、最大長に満たない場合は指定した長さになるように右側に「\0」が埋め込まれます。たとえば、列のデータ型が BINARY(3) に指定されている場合、a を挿入した場合、実際に格納される内容は "a\0\0" となり、ab を挿入した場合、実際の格納内容は "ab\0" になります。格納されたコンテンツ 指定された長さに達しても、格納スペースは指定された値 M になります。
VARBINARY 型の長さは可変であり、長さを指定した後、長さは 0 から最大値までの間で指定できます。たとえば、列のデータ型が VARBINARY(20) として指定されている場合、挿入された値の長さが 10 のみの場合、実際の記憶領域は 10 プラス 1 となり、実際の占有領域は文字列の実際の長さに 1 を加算したものになります。 。
BLOBタイプ
BLOB は、可変量のデータを格納するために使用されるバイナリ オブジェクトです。BLOB には TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB の 4 種類があり、次の表に示すように保持できる値の最大長が異なります。
データの種類 | 保管範囲 |
---|---|
タイニーブロブ | 最大長は 255 (28-1) バイトです |
BLOB | 最大長は 65535 (216-1) バイトです |
ミディアムブロブ | 最大長は 16777215 (224-1) バイトです |
肺ブロブ | 最大長は 4294967295 または 4GB (231-1) バイトです |
BLOB 列にはバイナリ文字列 (バイト文字列) が格納され、TEXT 列には 10 進数以外の文字列 (文字列) が格納されます。BLOB 列は文字セットであり、並べ替えと比較は列値バイトの数値に基づいて行われますが、TEXT 列には文字セットがあり、値は文字セットに従って並べ替えと比較が行われます。
要約する
一般に、適切なデータ型を選択すると、データベースのパフォーマンスが向上し、記憶域スペースが節約され、データの一貫性と有効性が確保され、データの処理と計算が容易になります。したがって、データベースを設計するときは、適切なデータ型を選択することが非常に重要です。~次のセクションでは、MySQL ビューの共有について説明します。