[⑭MySQL | データ型(2)] 文字列 | バイナリ型

序文

✨Xiao KMySQL コラムへようこそ。このセクションでは 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 ビューの共有について説明します。

おすすめ

転載: blog.csdn.net/qq_72157449/article/details/132396010