MySQL を学習するには、通常、最初にデータ型を学習する必要があります。開発であろうと MySQL であろうと、各データ オブジェクトには対応するデータ型があるからです。MySQL には豊富なデータ型が用意されています。たとえば、テーブルを作成するときは、次のデータ型を指定する必要があります。列テーブルにデータを挿入するときは、対応する列の型に厳密に従って値を渡すことも必要です。したがって、この部分は非常に重要です!
前の 2 つの記事はいくつかの操作を直接開始しました。通常の学習手順によると、これは正しくありませんが、前の 2 つの記事は主にいくつかの基本的な操作を含むため、追加するにはまだ遅すぎます~
MySQLのデータ型
値の型
厳密な数値データ型
-
タイイント
TINYINT は、MySQL および SQL Server のデータ型で、1 バイトのみのストレージを使用し、狭い範囲の整数値を格納するために使用されます。MySQL では、TINYINT は -128 ~ 127 の範囲の整数を格納できますが、 UNSIGNED キーワードを使用して符号なし型として定義でき、0 ~ 255 を格納に使用できます。SQL Server では、TINYINT は 0 ~ 255 の範囲で格納されます。
開発時には、TINYINT 型を使用して、ステータス識別子や列挙値などの情報を格納できます。これは、TINYINT 型を使用すると、占有される記憶領域を効果的に削減できるためです。同時に、TINYINT 型は他の整数データ型よりも占有する記憶領域が少ないため、計算を実行するときに TINYINT 型を使用すると計算効率も向上します。
-
スモールント
SMALLINT は、TINYINT より大きく INT より小さいデータを格納するために使用される整数データ型です。これは 2 バイトのストレージを占有し、範囲は -32,768 ~ 32,767 (UNSIGNED キーワードが使用されている場合は 0 ~ 65,535) です。
SMALLINT データ型は通常、統計や計算など、小さな整数値が必要な状況で使用されます。実際の開発ではステータスコードや数量などのデータを格納するためによく使われます。たとえば、電子商取引 Web サイトでは、SMALLINT タイプを使用して、0: 支払い保留中、1: 完了、2: キャンセルなどの注文のステータス コードを格納できます。
MySQL では、次の SQL ステートメントを使用して、SMALLINT 型のフィールドを持つテーブルを作成できます。
CREATE TABLE example_table ( id INT PRIMARY KEY, small_number SMALLINT );
上記のコードでは、
example_table
テーブルに id と small_number という 2 つのフィールドが含まれており、small_number のデータ型は SMALLINT です。 -
ミディアムミント
MEDIUMINT は、SMALLINT より大きく INT より小さいデータを格納するために使用される整数データ型です。これは 3 バイトのストレージを占有し、範囲は -8,388,608 ~ 8,388,607 (UNSIGNED キーワードが使用されている場合は 0 ~ 16,777,215) です。
MEDIUMINT データ型は通常、ユーザー ID や訪問数などの小さな整数値が必要な場合に使用されます。実際の開発では、MEDIUMINT 型を使用して中規模のデータを格納することができ、たとえば、ブログ システムでは、記事の閲覧数やコメント数を格納するのに MEDIUMINT 型を使用できます。
MySQL では、次の SQL ステートメントを使用して、MEDIUMINT 型の列を持つテーブルを作成できます。
CREATE TABLE example_table ( id INT PRIMARY KEY, medium_number MEDIUMINT );
上記のコードでは、
example_table
テーブルに id と media_number という 2 つのフィールドが含まれており、medium_number のデータ型は MEDIUMINT です。 -
整数/整数
INT は、TINYINT、SMALLINT、および MEDIUMINT より大きく、BIGINT より小さいデータを格納するために使用される整数データ型です。これは 4 バイトのストレージを占有し、範囲は-2,147,483,648 ~ 2,147,483,647 (UNSIGNED キーワードが使用されている場合は 0 ~ 4,294,967,295) です。
INT データ型は、通常、ユーザー ID、年齢、注文数量、金額などの整数値を保存する場合に推奨されるタイプです。実際の開発では、INT を使用して、閲覧数やいいね数などの大規模なデータを保存することもできます。
MySQL では、次の SQL ステートメントを使用して、INT タイプのフィールドを含むテーブルを作成できます。
CREATE TABLE example_table ( id INT PRIMARY KEY, age INT );
上記のコードでは、
example_table
テーブルに id と age の 2 つのフィールドが含まれており、age のデータ型は INT です。私を除いて
-
BIGINT
bigint は整数データ型です。int データ型よりも値の範囲が広く、すべての整数型の中で最大の記憶領域を占有し、より大きな整数値を格納するために使用できます。
具体的には、bigint データ型は 8 バイトの記憶領域を使用し、保存できる値の範囲は-9223372036854775808 ~ 9223372036854775807です。UNSIGNED キーワードが使用されている場合、範囲は 0 ~ 18446744073709551615 です。
実際のアプリケーションでは、通常、bigint データ型は、注文金額やビジネス番号などの非常に大きな整数値を保存する必要があるシナリオで使用されます。
他の整数データ型と比較して、bigint データ型には、より大きな値を格納できるという利点がありますが、欠点は、より多くの記憶領域を使用するため、クエリや並べ替えの際に負担が大きくなる可能性があることです。
以下は、MySQL で bigint データ型のフィールドを持つテーブルを作成する SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, large_num BIGINT );
上記のコードでは、
example_table
テーブルに id とlarge_num の 2 つのフィールドが含まれており、large_num のデータ型は bigint です。 -
10進数
DECIMAL は固定小数点数のデータ型です。浮動小数点データ型 FLOAT および DOUBLE とは異なり、DECIMAL 型の値は常に正確に格納され、固定小数点以下の桁数をサポートします。
DECIMAL データ型の形式は DECIMAL(p, s) です。ここで、p は合計桁数を表し、s は小数部の桁数を表します。DECIMAL 型の記憶領域は、p と s の値に応じて可変長になります。たとえば、DECIMAL(5,2) は、-999.99 から 999.99 までの任意の値を格納でき、3 バイトのストレージが必要です。
DECIMAL データ型は通常、価格、税率、および正確な計算が必要なその他のシナリオなどの通貨関連データを格納するために使用されます。たとえば、電子商取引システムでは、注文金額、商品価格などを DECIMAL 型を使用して保存できます。
以下は、DECIMAL データ型の列を持つテーブルを作成する MySQL の SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, price DECIMAL(8, 2) );
上記のコードでは、
example_table
テーブルに id と Price の 2 つのフィールドが含まれています。価格のデータ型は DECIMAL で、小数部の 2 桁を含む合計 8 桁です。 -
数値
NUMERIC は、DECIMAL とも呼ばれる正確な数値型です。範囲と精度を制御できる固定の正確な数値を表すために使用されます。
NUMERIC データ型は NUMERIC(p,s) として宣言されます。ここで、p は数値の精度 (最大値は 65) を表し、s は小数点以下の桁数 (最大値は 30) を表します。ストレージ内では、各 NUMERIC 値は固定バイト数を占め、そのサイズはその精度と位取りの影響を受けます。
NUMERICは、科学計算や金融計算など、高精度なデジタル計算が必要なシーンに適しています。一般に、財務データの処理には、FLOAT や DOUBLE よりも NUMERIC の方が適しています。
以下は、MySQL で NUMERIC データ型フィールドを持つテーブルを作成する SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, price NUMERIC(10, 2) );
上記のコードでは、
example_table
テーブルに id とprice の 2 つのフィールドが含まれており、price のデータ型は NUMERIC で、小数部の 2 桁を含む合計 10 桁になります。
近似的な数値データ型
-
浮く
FLOAT は、単精度浮動小数点数を表すために使用される浮動小数点数値型です。FLOAT が占めるバイト数は 4 バイトであり、DECIMAL よりも広範囲のデータを格納できますが、精度が失われます。
FLOAT データ型は FLOAT(p,s) として宣言されます。ここで、p は合計桁数を表し、s は小数点以下の桁数を表します。ストレージでは、FLOAT 値は 4 バイトを占め、そのサイズと精度は必ずしも固定されているわけではなく、実際の値に応じて調整できます。
FLOAT は、科学計算や画像処理など、高速コンピューティングは必要だが高精度要件は必要ないシナリオに適しています。DOUBLE と比較して、FLOAT は占有する記憶領域が少ないため、記憶領域が限られている場合のデータ処理効率を向上させることができます。
以下は、MySQL で FLOAT データ型のフィールドを持つテーブルを作成する SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, temperature FLOAT(5,2) );
上記のコードでは、
example_table
テーブルに ID と温度の 2 つのフィールドが含まれており、温度のデータ型は FLOAT で、小数部の 2 桁を含む合計 5 桁です。 -
本物
REAL は、単精度浮動小数点数を表すために使用される浮動小数点数値型です。REAL データ型と FLOAT データ型は MySQL では同等であり、どちらも浮動小数点数の格納に使用できます。違いは、REAL が占有するバイト数が 4 であり、FLOAT が占有するバイト数も 4 であることです。これは倍精度浮動小数点数 (DOUBLE) よりもフットプリントが小さいため、場合によってはデータベースの処理パフォーマンスを向上させることができます。
REAL を使用する場合は、その精度範囲と精度の損失に注意する必要があります。REAL は DECIMAL よりも大きな範囲を格納できますが、その精度は、IEEE 浮動小数点標準により切り捨てられたり丸められたりする危険があります。精度を確保するために、通貨データを格納する場合は REAL 型ではなく DECIMAL 型を使用することをお勧めします。
以下は、MySQL で REAL データ型のフィールドを持つテーブルを作成する SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, temperature REAL(5,2) );
上記のコードでは、
example_table
テーブルに ID と温度の 2 つのフィールドが含まれており、温度のデータ型は REAL で、小数部の 2 桁を含む合計 5 桁になります。 -
ダブル
DOUBLE は、倍精度浮動小数点数を表すために使用される浮動小数点数値型であり、より広い範囲とより高い精度で実数を格納できます。DOUBLE が占めるバイト数は 8 バイトで、比較的高い精度を確保しながら、より広範囲のデータを格納できます。
DOUBLE データ型は DOUBLE(p,s) として宣言されます。ここで、p は合計桁数を表し、s は小数点以下の桁数を表します。ストレージでは、DOUBLE 値は 8 バイトを占め、そのサイズと精度は固定されており、比較的正確で信頼性が高くなります。
MySQL では、データの正確性と信頼性を確保するために、給与、報酬、利益などの通貨関連情報を保存するために DOUBLE がよく使用されます。DOUBLE は、高精度の計算が必要なシナリオでも優れた役割を果たします。
以下は、MySQL で DOUBLE データ型のフィールドを持つテーブルを作成する SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, salary DOUBLE(10,2) );
上記のコードでは、
example_table
テーブルに id と給与の 2 つのフィールドが含まれています。給与のデータ型は DOUBLE で、合計 10 桁で、そのうち小数部が 2 桁です。
少し
-
少し
BIT は、ビット データを格納するために使用されるバイナリ数値型です。BIT型は0と1の2つの値を格納でき、場合によっては特定の状態がオンかオフかを示すこともできます。
BIT データ型は BIT(M) として宣言されます (M は格納されるビット数を表します) 。MySQL では、BIT 型は最大 64 ビット (8 バイト) のバイナリ データを格納できます。たとえば、スイッチの状態を保存する場合は、BIT(1) データ型を使用できるため、要件を満たすために必要なビットは 1 つだけです。
MySQL では、BIT 型は、ユーザーがログインしているか管理者権限を持っているかを保存するなど、ブール データを表すためによく使用されます。さらに、BIT タイプは、IPv4 アドレスのバイナリ形式など、テキスト文字列のバイナリ形式を表すために使用することもできます。
以下は、MySQL で BIT データ型のフィールドを持つテーブルを作成する SQL ステートメントの例です。
CREATE TABLE example_table ( id INT PRIMARY KEY, switch BIT(1) );
上記のコードでは、
example_table
テーブルに id と switch の 2 つのフィールドが含まれています。switch のデータ型は BIT で、占有する必要があるのは 1 ビットのみです。以下は、BIT タイプを使用してスイッチ状態を保存する例です。
ID スイッチ 1 0 2 1 3 0 4 1
文字列型
固定長文字列型
-
チャー
CHAR は、固定長の文字列を格納するための MySQL データベースのデータ型です。文字列の最大長を指定する必要があり、最大長は 255 文字を超えることはできません。
CHAR型の値は常に固定長になるまでスペースが埋め込まれますが、格納時に文字列の長さが指定した長さに満たない場合は自動的にスペースが追加されます。データを取得すると、文字列の末尾のスペースが自動的に削除されて表示されます。
CHAR 型の利点は、直感的で扱いやすく、並べ替えが簡単であることです。郵便番号や電話番号などの保存など、一部の特定のシナリオでは、最大長が固定された CHAR データ型の使用が適しています。
一般に、CHAR 型は固定長のテキスト情報を格納するのに適していますが、使用する場合は固定長文字列の格納場所とスペースの占有に注意する必要があります。
-
バイナリ
BINARY は、バイナリ データを保存するために使用される MySQL データベースのデータ型です。これは CHAR 型に似ており、固定長を指定する必要がありますが、BINARY は文字列データの代わりにバイナリ データを格納します。
BINARY 型の値は 2 進数であるため、CHAR 型のように値を空白で埋める必要がなく、空白があっても問題ありません。データをフェッチするとき、バイナリ データを比較するとき、MySQL は大文字と小文字を区別せず、比較するときにバイナリ比較として扱います。
BINARY 型の利用シーンは主に大容量データの高速処理ですので、例えば写真や音声、動画などのバイナリファイル形式のデータを大量に保存したい場合には、BINARY 型を使用することができます。保管所。さらに、バイナリ データは、暗号化された機密情報などの保存にも使用できます。
なお、BINARY 型でデータを格納する場合、固定長の 2 進数型であるため、データ長が足りない場合は自動的にゼロが埋められ、長さを超える場合は切り捨てられます。一部のデータ損失が発生するため、データの保存方法と読み取り方法を慎重に検討する必要があります。
可変長文字列型
-
VARCHAR
VARCHAR は、可変長の文字列を格納するための MySQL データベースのデータ型です。固定長の CHAR 型と比較して、VARCHAR は占有される記憶領域を動的に調整して記憶領域の使用量を節約できるため、柔軟性が高くなります。
テーブルを作成するときは、VARCHAR 列の最大長を指定する必要があります。データを埋めるときに行の実際の長さが指定された最大長よりも短い場合、実際の長さに対応する記憶域のみが占有されます。たとえば、長さ 10 の VARCHAR 列に長さ 5 の文字列が入力された場合、消費される記憶域は 5 文字だけです。
VARCHAR(10) カラムに長さ 15 の文字列が入力された場合、MySQL は最初の 10 文字のみをカラムに保存し、その後の 5 文字は切り捨てられてリストに保存されません。
もちろん、SQL モードを設定することでデフォルトのインターセプト動作を変更することもできます。たとえば、モードが set の場合
STRICT_TRANS_TABLES
、最大長を超えるデータが VARCHAR カラムに入力されると、MySQL はエラーを報告し、データの保存を拒否します。そして、モードが set の場合TRADITIONAL
、MySQL は最大長を超える部分を無視し、最大長に近い有効なデータをカラムに埋めます。VARCHAR は文字列型データを格納するため、文字列を格納および比較するときにいくつかの特別なルールがあります。まず、VARCHAR 型の照合順序は文字セットに関連しています。これは、文字セットが異なると、同じ文字の ASCII コードも異なる場合があるためです。次に、文字列に対する VARCHAR 型の大文字と小文字の区別に注意する必要があります。これは、MySQL データベース自体の言語設定に関連しています。
また、VARCHAR 型の最大長は 65535 文字を超えることができないので、それより長いテキスト情報を格納する必要がある場合は、TEXT 型または LONGTEXT 型を使用する必要があることに注意してください。
-
ヴァービナリー
VARBINARY は、画像、オーディオ、ビデオなどの非テキスト データを保存するために使用される MySQL のバイナリ データ型です。VARBINARY の最大長は65,535 バイトで、任意の長さのバイナリ データを格納できます。
VARCHAR とは異なり、VARBINARY はデータを文字形式ではなく生のバイナリ形式で格納するため、文字エンコーディングの問題はありません。他のデータ型をバイナリ型または VARBINARY 型に変換する場合、データは左側が埋め込まれるか切り詰められます。パディングには 16 進数のゼロが使用されます。したがって、さまざまなシステム間でバイナリ データを転送する必要がある場合は、VARBINARY 型を使用するのが最も簡単な方法となります。
VARBINARY 型のデータは、INSERT、UPDATE、および SELECT ステートメントを通じて操作でき、他のデータ型と混合することもできます。ただし、VARBINARY データ型を使用する場合は、より多くのメモリとプロセッサ時間を必要とするため、他の通常のデータ型よりも注意する必要があります。さらに、VARBINARY 型データに対するクエリ操作にも特別な処理が必要です。
ラージオブジェクトタイプ
-
タイニーブロブ
TINYBLOB は MySQL データベースのバイナリ データ タイプで、最大 255 バイトのバイナリ データを格納できます。他のバイナリ データ型 (BLOB、MEDIUMBLOB、LONGBLOB など) と比較すると、TINYBLOB は格納できるデータ量は少ないですが、占有する記憶領域も小さくなるため、少量のバイナリ データを小容量で格納するのに適しています。
実際のアプリケーションでは、TINYBLOB は、次のような小さなバイナリ データを保存するためによく使用されます。
- アイコン: Web サイトまたはアプリケーションのアイコンは通常小さく、TINYBLOB タイプを使用して保存できます。
- サムネイル: 多数の画像を表示する必要がある Web サイトまたはアプリケーションでは、通常、ユーザー エクスペリエンスを向上させるためにサムネイルを生成する必要があります。これらのサムネイルのサイズは通常、数百バイト以下であり、TINYBLOB タイプを使用して保存できます。
- 小さな効果音ファイル: ゲームやアニメーション アプリケーションによっては、単純な効果音 (ボタンのクリック音など) が存在する場合があります。通常、これらの効果音ファイルは小さく、TINYBLOB タイプに保存できます。
上記のシナリオでは、格納されるデータの量が少ないため、TINYBLOB タイプを使用すると、格納領域を節約し、データベースのパフォーマンスを向上させることができます。さらに、バイナリ データを保存する場合は、データの正確さと整合性を確保するために、適切なエンコードと形式変換を実行するように注意する必要があります。
-
BLOB
BLOB は MySQL データベースのバイナリ データ タイプであり、任意の長さのバイナリ データを格納できます。他のバイナリ データ型 (TINYBLOB、MEDIUMBLOB、LONGBLOB など) と比較して、BLOB は大量のデータを保存できるため、画像、オーディオ、ビデオなどの大きなバイナリ ファイルの保存に適しています。
実際のアプリケーションでは、BLOB は次のシナリオでよく使用されます。
- 画像ストレージ: Web サイトやアプリケーションでは大量の画像を保存する必要があり、通常、画像はバイナリ形式でデータベースに保存されます。たとえば、電子商取引 Web サイトでは、BLOB タイプを使用して製品画像を保存できます。
- オーディオおよびビデオ ストレージ: ビデオ クラウド プラットフォーム、オンライン オーディオおよびビデオ Web サイトなど、大規模なオーディオ ファイルおよびビデオ ファイルを保存する必要があるアプリケーションの場合、BLOB タイプを使用してこれらのファイルを保存できます。
- ドキュメント ストレージ: 一部のアプリケーションでは、PDF ファイルや Word ドキュメントなどの大きなドキュメント ファイルを保存する必要があります。これらのファイルは BLOB タイプを使用して保存できます。
BLOB 型は任意の長さのバイナリ データを格納できるため、大きなファイルを格納する場合は、ストレージ領域の占有と読み取り/書き込みのパフォーマンスを考慮する必要があります。一般に、大きなファイルをデータベースに保存すると、データベースのパフォーマンスに大きな影響を与えるため、実際のアプリケーションでは、通常、大きなファイルの保存に分散ファイル システムなどのテクノロジが使用されます。
- 例
MySQL に画像を BLOB として保存するには、次の手順を実行します。
- プログラミング言語を使用して MySQL データベースに接続します。
- ファイルを開き、イメージのバイナリ データを読み取り、変数に保存します。
- INSERT SQL ステートメントを作成し、変数をパラメーターとして SQL ステートメントに渡します。たとえば、「example.jpg」という名前の画像を「image_table」という名前のテーブルの BLOB フィールドに保存するとすると、次のコードを使用できます。
with open("example.jpg", "rb") as image_file: image_data = image_file.read() # 将图片数据插入数据库 cursor.execute("INSERT INTO image_table (image_blob) VALUES (%s)", (image_data,))
この例では、最初に Python の組み込み open() 関数を使用して画像ファイルが開かれ、その中のデータがバイナリ モード (「rb」) で読み取られます。次に、読み取ったデータを image_data という名前の変数に保存します。
次に、SQL INSERT ステートメントを実行して、変数内のバイナリ データをデータベースに保存します。SQL ステートメントを実行するときは、Python MySQL ドライバーによって提供されるexecute() メソッドが使用され、image_data がパラメーターとして SQL ステートメントのプレースホルダー "%s" に渡されます。
-
ミディアムブロブ
MEDIUMBLOBは MySQL の BLOB タイプの 1 つで、バイナリ ラージ オブジェクト (Binary Large Object) を格納するために使用され、最大サイズ 16MB のバイナリ データを格納できます。
実際のシナリオでは、通常、MEDIUMBLOB データ型は、画像やオーディオなど、頻繁に読み取ったり更新する必要があるバイナリ データを格納するために使用されます。LONGTEXT 型と比較して、MEDIUMBLOB 型は非常に大きなバイナリ データをより適切に処理でき、パフォーマンスが向上し、必要な記憶領域が少なくなります。さらに、一部の MySQL ベースのアプリケーションでは、MEDIUMBLOB タイプを使用して一部のデータをキャッシュし、アプリケーションのパフォーマンスと応答速度を向上させることもできます。
たとえば、オンライン音楽 Web サイトでは、MEDIUMBLOB データ型を使用して、オンライン再生用にユーザーがアップロードした音楽ファイルを保存することで、ユーザー エクスペリエンスを向上させることができます。さらに、一部の電子商取引 Web サイトでは、ユーザーに表示する製品画像を保存するために MEDIUMBLOB を使用する場合もあります。
-
肺ブロブ
LONGBLOB はMySQL の BLOB タイプの 1 つで、バイナリ ラージ オブジェクト (Binary Large Object) を格納するために使用され、最大サイズ 4GB のバイナリ データを格納できます。
LONGBLOB データ型は通常、画像ファイル、オーディオ ファイル、ビデオ ファイルなど、頻繁に読み取って更新する必要がある非常に大きなバイナリ データを格納するために使用されます。他のいくつかの BLOB タイプと比較して、LONGBLOB は最大のバイナリ データを処理でき、パフォーマンスが高くなりますが、より多くの記憶領域を消費します。バイナリ データの大規模なアップロードおよびダウンロードなど、一部の特定のシナリオでは、LONGBLOB を使用して処理速度を向上させ、I/O 操作の繰り返しを回避できます。
たとえば、ビデオ サイトでは、オンライン再生用にユーザーがアップロードしたビデオ ファイルを保存するために LONGBLOB タイプを使用する場合があります。さらに、一部の科学研究機関は、毎日のクエリと分析のために大量の科学データを保存するために LONGBLOB を使用する場合があります。
-
小さなテキスト
TINYTEXT は、短いテキスト文字列を格納するために使用されるデータ型の 1 つで、最大 255 文字のテキスト データを格納できます。
TINYTEXT は通常、タイトル、説明、メモ、概要などの短いテキスト コンテンツを保存するために使用されます。MEDIUMTEXT や LONGTEXT とは異なり、TINYTEXT は必要な記憶領域が少なくなりますが、比較的少量のテキスト データしか保存できません。
たとえば、ニュース Web サイトでは、TINYTEXT を使用して各記事のタイトルと概要情報を保存し、リスト ページでユーザーに表示できます。さらに、ブログやフォーラムなどの一部のアプリケーションでは、コメントや返信などの短いテキスト情報を保存するために TINYTEXT がよく使用されます。
-
文章
TEXT型は、大量のテキストデータを格納するために使用されるデータ型です。TEXT 型は、VARCHAR 型と比較して、最大 65,535 文字までの長い文字列を格納できます。同時に、UTF-8、GB2312 など、より多くの文字セット エンコード方式もサポートしています。65,535 文字を超えるデータを保存する必要がある場合は、MEDIUMTEXT または LONGTEXT タイプを使用できます。
VARCHAR 型とは異なり、TEXT 型では最大長を指定する必要がなく、格納される文字列の長さは動的に変更できます。そのため、記事やコメントなどのテキストデータなど、一部の可変長データを格納するのに適しています。
TEXT 型を使用する場合、大量のテキスト データを格納するため、多くの記憶領域とクエリ時間が必要になることに注意してください。したがって、実際の使用では、特定のビジネス ニーズに応じて適切なデータ型を選択する必要があります。
-
メディアテキスト
MEDIUMTEXT 型は、最大長 16,777,215 文字の長いテキスト データを格納できるデータ型を指します。
さまざまな TEXT タイプの最大ストレージ サイズは[ 4 ] に示されています。MEDIUMTEXT型の最大格納サイズは16MBで、TEXT型(最大格納サイズは64KB)よりも大きくなります。したがって、64KB を超え 4GB 未満のデータを保存する必要がある場合は、MEDIUMTEXT タイプを選択できます。
MEDIUMTEXT タイプは大きな記憶領域とクエリ時間を占有するため、無意味な無駄を避けるために特定のビジネス ニーズに従って使用する必要があることに注意してください。
-
長文
LONGTEXT は、大量のテキスト データを格納するために使用されるデータ型です。最大 4GB までの文字列またはテキスト データを保存するために使用できます。
大容量のデータを保存できるため、使用する場合はストレージ容量とクエリ効率を考慮する必要があることに注意してください。さらに、全文検索やその他の機能が必要な場合は、MySQL に付属する全文検索エンジン MySQL FTS の使用を検討できます。
列挙型
-
ENUM
MySQL の ENUM 型は、列挙値を格納するために使用されるデータ型です。列挙 (Enum)は、いくつかの事前定義された定数をコレクションに配置し、このコレクション内の要素を使用して特定の状態または属性値を表すことです。
[ 1 ] MySQL では、ENUM 型は 1 つ以上の列挙値を定義し、各列挙値は文字列として指定され、カンマで区切られます。データを挿入する場合、ENUM 型の定義された値のうち 1 つだけを挿入できます。例えば:
CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, gender ENUM('male', 'female'), PRIMARY KEY (id) ); INSERT INTO example (gender) VALUES ('male');
上の例では、
example
ID フィールドとgender
ENUM 型のフィールドを含む という名前のテーブルを作成しました。gender
このフィールドでは、男性または女性の 2 つの値のうち 1 つだけを選択でき、他の値は挿入できません。ENUM 型のオプションの値は事前に定義されているため、列挙値が変更されないようにテーブル構造を設計する際には慎重な考慮が必要であることに注意してください。同時に、クエリや並べ替えなどの操作を実行するときに、文字列値の代わりに列挙値の整数値を使用すると、クエリの効率が向上することに注意してください。
コレクションタイプ
-
設定
MySQL の SET 型は、設定値を格納するために使用されるデータ型です。セット (Set) は、列挙型と同様に、事前に定義された複数の定数をセットに入れ、このセット内の要素を使用して特定の状態または属性値を表すことです。
[ 1 ] MySQL では、SET タイプを使用して 1 つ以上の設定値を定義し、各設定値は文字列として指定され、カンマで区切られます。データを挿入するときは、この SET タイプの複数の定義された値を使用し、それらをカンマで区切ることを選択できます。例えば:
CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, colors SET('red', 'green', 'blue'), PRIMARY KEY (id) ); INSERT INTO example (colors) VALUES ('red, green');
上の例では、
example
ID フィールドとcolors
タイプ SET のフィールドを含む という名前のテーブルを作成しました。colors
フィールドでは、カンマで区切られた複数の色の値の 1 つ以上の組み合わせを選択できます。なお、SET型のオプション値はあらかじめ定義されているため、設定値が変更されないようにテーブル構造を設計する際には十分な考慮が必要です。同時に、クエリや並べ替えなどの操作を実行するときに、文字列値の代わりに設定値のバイナリ値を使用してクエリの効率を向上できることに注意してください。
日付と時刻のタイプ
-
日にち
MySQL の DATE は日付値を表すために使用されるデータ型であり、その形式は「YYYY-MM-DD」です。DATE 型でサポートされる日付範囲は '1000-01-01' から '9999-12-31' で、4 バイトの記憶領域を使用します。
日付値を補間するにはいくつかの方法があります。たとえば、日付値を文字列として直接挿入することも、MySQL の組み込み DATE 関数を使用してデータの変換や書式設定を行うこともできます。
DATE 型は、スケジュールやタスクのスケジュールなど、日時データを保存および処理する必要があるアプリケーションでよく使用されます。DATETIME 型とは異なり、**DATE 型には時刻情報は含まれず、日付部分のみを表します。** したがって、日付と時刻の情報を同時に表す必要があるシナリオでは、通常は DATETIME 型を使用する必要があります。
-
時間
TIME は、時刻値を「hh:mm:ss」形式で表すために使用されるデータ型です。TIME タイプでサポートされる時間範囲は「-838:59:59」から「838:59:59」で、3 バイトの記憶域スペースを使用します。
MySQL では、TIME 型を使用して、映画の長さ、オーディオ ファイルの再生時間など、経過時間、継続時間、継続時間などを表すことができます。
同時に、MySQL は、TIME タイプを操作および計算するための一連の組み込み時間関数を提供します。たとえば、TIMEDIFF 関数は 2 つの時刻間の時差を計算するために使用され、TIME_FORMAT 関数は出力のフォーマットに使用されます。時間の値など。
TIME 型は 24 時間を超える期間を表すことができますが、日付関連の演算の計算に直接使用することはできないことに注意してください。日付、時刻、または日時関連のデータを処理する必要がある場合は、DATETIME や TIMESTAMP などの他の型を使用できます。
-
年
YEAR は年の値を表すために使用されるデータ型で、年の値を 4 桁の形式で保存できます。YEAR タイプは 1 バイトの記憶域を占有し、サポートされる年の範囲は 1901 年から 2155 年までです。
MySQL では、通常、YEAR タイプは年にのみ関連するデータを格納するために使用されます。たとえば、YEAR 型を使用して、人の誕生年、会社の設立年などを表すことができます。YEAR タイプは、年の部分のみを含む日付を処理するために使用することもできます。
YEAR 型を使用して日付を保存する場合、年情報のみが含まれ、月と日付の情報は含まれないことに注意してください。年、月、日の完全な日付情報を同時に保存する必要がある場合は、DATE 型または DATETIME 型を使用する必要があります。
YEAR タイプのフィールドをクエリする場合、YEAR() 関数を使用して整数に変換し、比較と計算を容易にすることができます。例えば:
SELECT YEAR(date_field) FROM table;
この SQL ステートメントは、
date_field
比較と計算のために YEAR 型のフィールドを整数に変換します。 -
日付時刻
DATETIME は、「YYYY-MM-DD hh:mm:ss」形式で日付と時刻の値を表すために使用されるデータ型です。DATETIME 型は、「1000-01-01 00:00:00」から「9999-12-31 23:59:59」までの時間範囲をサポートし、8 バイトの記憶域スペースを使用します。
MySQL では、DATETIME 型を使用して日付と時刻の情報を保存し、対応する計算と比較を実行できます。DATE 型や TIME 型とは異なり、DATETIME 型には日付と時刻の両方の情報が含まれており、時点または期間をより高い精度で表すことができます。DATETIME 型は、タイム ゾーンの変換と処理もサポートします。
MySQL は、DATETIME 型を操作および計算するための一連の組み込み時刻関数を提供します。たとえば、TIMESTAMPDIFF 関数は 2 つの時刻の差を計算するために使用され、FROM_UNIXTIME 関数は UNIX タイムスタンプを DATETIME 型の時刻値に変換するために使用されます。 . .
同時に、MySQL は DATETIME 型のフォーマットされた出力もサポートしており、ニーズに応じてカスタマイズできます。次に例を示します。
SELECT DATE_FORMAT(datetime_field,'%Y-%m-%d %H:%i:%s') FROM table;
この SQL ステートメントは
datetime_field
DATETIME 型のフィールドをフォーマットし、出力フォーマットは「YYYY-MM-DD hh:mm:ss」です。DATETIME 型には日付と時刻の両方の情報が含まれるため、保存およびクエリ時に DATE 型や TIME 型よりも多くの記憶領域が必要になることに注意してください。スペースの不必要な浪費やパフォーマンスの損失を避けるために、保管および使用中に注意する必要があります。
-
タイムスタンプ
TIMESTAMP 型は、日付と時刻のデータを格納するために使用される日時型で、その形式は「YYYY-MM-DD HH:MM:SS」です。MySQL では、TIMESTAMP タイプは 4 バイトの記憶領域を使用し、1970 年 1 月 1 日の 0:00 から 2038 年までのタイムスタンプを保存できます。
DATETIME 型とは異なり、TIMESTAMP 型には、1970 年 1 月 1 日 0:00:00 (UTC 時間) からの経過秒数が格納されます。データを挿入するときに、TIMESTAMP タイプの値が指定されていない場合、MySQL は現在時刻をデフォルト値として自動的に保存します。レコードを更新するときに、レコードが更新されていない場合、対応する TIMESTAMP タイプのフィールドは変更されません。
TIMESTAMP 型は自動更新機能をサポートしています。テーブルを定義するときに、TIMESTAMP 型フィールドに DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属性を指定すると、新しいレコードが挿入または更新されたときに、対応するフィールドの値が自動的に更新されます。現在の時刻に更新されます。
TIMESTAMP 型で使用される記憶域スペースが小さいため、その精度は第 2 レベルまでしか正確でなく、タイム ゾーン変換の問題があることに注意してください。MySQL では、TIMESTAMP タイプに格納される UTC 時刻は現在のシステムのタイムゾーン オフセットに関連しているため、TIMESTAMP タイプを使用する場合はタイムゾーンの問題を考慮する必要があります。
JSONタイプ
-
JSON
JSON (JavaScript Object Notation) は、軽量で読み書きが簡単なデータ交換形式です。**これは JavaScript プログラミング言語に基づいていますが、MySQL では、JSON 型で保存されたデータは JavaScript オブジェクトに解析されず、プレーン テキストで保存されます。**アプリケーションで JSON データを使用する必要がある場合、プログラムはそれを独自に解析する必要があります。
MySQL の JSON 型は、JSON 形式でデータを保存および操作するための新しいデータ型です。JSON (JavaScript Object Notation) は、軽量で読み書きが簡単なデータ交換形式です。
JSON タイプを使用すると、面倒なデータ変換を行わずに、JSON 形式のデータを MySQL データベースに簡単に保存およびクエリできます。JSON 形式の大量のデータを含むテーブルの場合、JSON タイプを使用すると、データの処理とクエリが簡単に行えます。
MySQL では、通常の SQL ステートメントを使用して、SELECT、INSERT などのJSON タイプのデータを操作できます。同時に、JSON タイプのフィールドを操作およびクエリするための一連の JSON 関数も提供します。これらの関数には、JSON_OBJECT、JSON_ARRAY、JSON_EXTRACT などが含まれており、JSON データからデータを読み取りまたは抽出したり、JSON タイプのフィールドを追加、削除、変更、クエリしたりできます。
MySQL では、JSON タイプは次のように使用されます。
- JSONタイプのフィールドを作成する
JSON タイプのフィールドを作成するには、次のステートメントを使用できます。
CREATE TABLE mytable ( id INT PRIMARY KEY, data JSON );
- JSON型データを挿入する
JSON_OBJECT
JSON データを挿入するときは、やJSON_ARRAY
などの関数を使用して、JSON データを MySQL が認識できる形式に変換する必要があります。例えば:INSERT INTO mytable VALUES (1,JSON_OBJECT('name','Alice','age',25,'hobbies',JSON_ARRAY('reading','swimming')));
JSON データは、次のステートメントを使用して取得できます。
SELECT data->>'$.name' AS name,data->>'$.age' AS age FROM mytable WHERE data->>'$.name' = 'Alice';
-
JSON型データのクエリ
JSON 形式のデータを含むテーブルの場合、組み込みの JSON 関数を使用してクエリを実行できます。たとえば、次のようになります。
-
JSON_EXTRACT
: JSON オブジェクトまたは配列からデータを抽出するために使用されます。 -
JSON_CONTAINS
: 指定された文字列、数値、またはブール値が含まれているかどうかを判断するために使用されます。 -
JSON_SEARCH
: JSON オブジェクトまたは配列内で指定された文字列を検索し、そのパスを返します。
たとえば、次のステートメントを使用して、JSON タイプで年齢 > 18 のすべてのレコードをクエリします。 ここで、 は
$.age
JSON のフィールドを表しますage
。SELECT * FROM mytable WHERE JSON_EXTRACT(data, '$.age') > 18;
- JSON型データの更新
UPDATE ステートメントを使用して、JSON タイプのデータを更新できます。JSON オブジェクト内の指定されたプロパティを更新するには、JSON_SET 関数を使用できます。例えば:
UPDATE mytable SET data=JSON_SET(data,'$.age',30) WHERE id=1;
- JSON型データの削除
JSON型データから指定したノードを削除するには、JSON_REMOVE関数を使用します。例えば:
UPDATE mytable SET data=JSON_REMOVE(data,'$.age') WHERE id=1;
上記は、MySQL での JSON 型の使用方法です。MySQL での JSON 型は、JSON 形式のデータを保存および操作する便利な方法を提供しますが、いくつかの制限もあることに注意してください。一方で、MySQL の JSON タイプはインデックスをサポートしていないため、大規模なデータ セットを扱うときにパフォーマンスの問題が発生する可能性があります。一方、JSON タイプのデータは引き続き MySQL データベースにテキストとして保存されるため、大規模なデータ セットをクエリする場合は若干遅くなる可能性があります。
空間データ型
MySQL の空間データ型とは、点、面、ポリゴンなどの空間データの処理と保存に使用されるデータ型を指します。
空間データ タイプを使用すると、2 つの幾何学的オブジェクト間の距離の計算、点が領域内にあるかどうかの判断など、空間分析とクエリが容易になります。たとえば、地図ソフトウェアで近くのレストランを検索するには、空間データ タイプを使用する必要があります。
応用シナリオは、地理情報システム (GIS)、通信ネットワーク計画、物流ルートの最適化、都市交通管理など、非常に広範囲にわたります。例えば、鉄道会社が、ある鉄道路線の長さや周辺の都市情報を問い合わせる必要がある場合、MySQL の空間データ型で実現できます。
MySQL の空間データ型は、点、線、面などを含むさまざまな幾何学オブジェクトをサポートします。これらのオブジェクトは、さまざまな形状や空間関係を記述することができます。保存する場合、これらのオブジェクトの座標は、平面座標系や地理座標系などの異なる空間参照系を採用できます。
地理座標系は通常、緯度と経度で表される地表上の空間位置を記述するために使用されます。平面座標系は、2 次元平面上の空間位置を記述するために使用され、通常はデカルト座標系で表されます。したがって、MySQL の空間データ タイプをデータ ストレージに使用する場合は、特定の状況に応じて適切な空間参照系とそれに必要な座標系を選択する必要があります。
基本的なジオメトリ タイプ
-
点
MySQL では、Point タイプは、平面または空間内の点を表すために使用される空間データ タイプです。これは 2 つの座標で構成され、通常は経度と緯度の値を使用して記述されます。
Point タイプには、WKT 形式と WKB 形式という 2 つの一般的な表現があります。このうち、WKT は Well-Known Text の略称で、テキスト形式を表現したもので、たとえば次のようになります。
POINT(30.2 50.5)
この Point は、経度 30.2、緯度 50.5 の点を表します。
WKB は Well-Known Binary の略語で、通常は空間データの保存と送信に使用されるバイナリ形式表現です。次に例を示します。
0x00000000010C9DDB51B81E85EB51B81E85EB
この Point のバイナリ表現は、倍精度の X 座標と Y 座標、および SRID 値 (空間参照識別子) で構成されます。
データ ストレージに Point タイプを使用する場合は、適切な座標系と空間参照系の選択に注意し、空間クエリと操作の処理方法を理解する必要があります。さらに、MySQL では、Point タイプに関連する多くの関数と演算子も提供しています。たとえば、ST_Distance() 関数は 2 つの Points 間の距離を計算するために使用され、ST_Contains() 関数は Point が 2 つの Point に含まれるかどうかを判断するために使用されます。別の幾何学的オブジェクトなどを待ってください。
-
線ストリング
LINESTRINGm は、順序付けられた点のセットで構成される線分を記述するために使用されます。POINT タイプとは異なり、LINESTRING には複数の点が含まれており、各線分は隣接する 2 つの点間の接続線で構成されます。
LINESTRING 型の表現形式は POINT 型と同様で、WKT または WKB 形式で表現することもできます。たとえば、次は WKT 形式の LINESTRING です。
LINESTRING(0 0, 10 10, 20 25, 50 60)
この LINESTRING は、(0, 0)、(10, 10)、(20, 25)、(50, 60) の 4 つの点で構成され、これらを順に接続して線分を形成します。
データ ストレージに MySQL の空間データ タイプを使用する場合は、適切な座標系と空間参照系を選択し、空間クエリと操作を実行する方法を理解する必要があります。MySQL は、LINESTRING 型に関連する多くの関数と演算子を提供します。たとえば、ST_Intersects() 関数は 2 つの線分が交差するかどうかを判断するために使用され、ST_Length() 関数は線分の長さを計算するために使用されます。
さらに、MySQL の LINESTRING 型は GeoJSON 標準の LineString 型に似ており、座標配列でも表すことができることに注意してください。配列には複数の点の緯度経度や座標情報が含まれており、これらの点を結ぶことで線分を形成できます。
-
ポリゴン
POLYGON は主に平面上の閉じた多角形を記述するために使用されます。このタイプは一連の順序付けられた点で囲まれており、各点には X と Y という 2 つの座標パラメータがあります。
MySQL には 2,000 社を超える OEM、ISV、および VAR が含まれており、これらの企業はアプリケーション、ハードウェア、デバイスの組み込みデータベースで MySQL を使用し、アプリケーションの競争力を高め、より迅速に市場投入し、販売コストを削減しています。現時点では、MySQL のポリゴン タイプが広く使用されることになります。
ポリゴンは、MySQL でグラフィック計画、地図作成、その他の GIS プロセスに使用されるデータ タイプであり、すべての幾何学的タイプを保存できます。もちろん、これには、単純な幾何学的形状 (Point、Line など) だけでなく、複合データ型 (MULTIPOINT、MULTILINESTRING、MULTIPOLYGON など) も含まれます。
MySQL では、POLYGON の表現には WKT または WKB 形式を使用できます。たとえば、WKT 形式の POLYGON は次のとおりです。
POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))
各ポリゴンは多数のライン ループで構成されているため、保存する際はポリゴンの構造とトポロジ関係に特別な注意を払う必要があります。
MySQL では、POLYGON タイプのさまざまな関数と演算子が提供されています。たとえば、ST_Contains() 関数は、点または線が多角形に含まれるかどうかを判断するために使用され、ST_Area() 関数は、ポリゴンの面積を計算するために使用されます。多角形。
複合ジオメトリタイプ
-
マルチポイント
MySQL の型は
MULTIPOINT
、点のコレクションを表すために使用される空間データ型です。点は異なる座標を持つことができますが、すべて同じ平面上にあります。MULTIPOINT
データの種類は MySQL データベースに保存でき、MULTIPOINT
2 種類のデータ間の距離の計算や、点がMULTIPOINT
データの種類に含まれるかどうかの判断など、GIS 関数を使用して処理できます。この型を使用するとMULTIPOINT
、複数の点の座標情報を 1 つのフィールドに格納できるため、管理と処理が容易になります。 -
複数行の文字列
MULTILINESTRING
線分の集合を表すために使用されます。これらの線分は異なる始点と終点を持つことができますが、すべて同じ平面上にあります。MULTILINESTRING
データの種類は MySQL データベースに保存でき、2 種類のデータ間の距離の計算や、 1 種類のデータで記述される線分MULTILINESTRING
上に点があるかどうかの判断など、 GIS 関数を使用して処理できます。MULTILINESTRING
この型を使用するとMULTILINESTRING
、複数の線分の座標情報を 1 つのフィールドに格納できるため、管理と処理が容易になります。タイプと同様に
MULTIPOINT
、タイプもMULTILINESTRING
複数のタイプのオブジェクトでLINESTRING
構成されます。各LINESTRING
オブジェクトは線分を表し、MULTILINESTRING
タイプ内のすべての線分が複雑な幾何学的オブジェクトに結合されます。MULTILINESTRING
タイプ内の各セグメントは、エンドポイントで隣接するセグメントに接続する必要があることに注意してください。 -
マルチポリゴン
MULTIPOLYGON
複数のポリゴンで構成される複雑な幾何学オブジェクトを表すために使用されます。各ポリゴンは異なる頂点と境界を持つことができますが、すべてが同じ平面上にあります。MULTIPOLYGON
データの種類は MySQL データベースに保存でき、MULTIPOLYGON
2 種類のデータ間の距離の計算や、ある点がMULTIPOLYGON
1 種類のデータで記述される多角形の内側にあるかどうかの判断など、GIS 関数を使用して処理できます。この型を使用するとMULTIPOLYGON
、複数のポリゴンの座標情報を 1 つのフィールドに格納できるため、管理と処理が容易になります。MULTIPOINT
タイプやタイプと同様にMULTILINESTRING
、タイプもMULTIPOLYGON
複数のタイプのオブジェクトでPOLYGON
構成されます。各POLYGON
オブジェクトはポリゴンを表し、MULTIPOLYGON
タイプ内のすべてのポリゴンが複合ジオメトリ オブジェクトに結合されます。MULTIPOLYGON
このタイプの各多角形は閉じている必要がある、つまり、多角形の最初の点と最後の点が等しくなければならないことに注意してください。 -
ジオメトリコレクション
GEOMETRYCOLLECTION
複数の幾何学オブジェクトで構成される複雑な幾何学オブジェクトのコレクションを表すために使用されます。これらの幾何学的オブジェクトは、点、線、多角形などのさまざまな幾何学的図形にすることができます。GEOMETRYCOLLECTION
データの種類は MySQL データベースに保存でき、GIS 関数を使用して処理できます。たとえば、GEOMETRYCOLLECTION
2 種類のデータ間の距離を計算したり、特定の点がGEOMETRYCOLLECTION
データの種類で記述された幾何学的オブジェクトのコレクション内にあるかどうかを判断したりすることができます。GEOMETRYCOLLECTION
このタイプを使用すると、複数の幾何学オブジェクトの座標情報を 1 つのフィールドに保存し、管理と処理を容易にすることができます。GEOMETRYCOLLECTION
タイプ内の各ジオメトリ オブジェクトには、独自のタイプとジオメトリが必要であることに注意してください。したがって、データの種類を扱うときはGEOMETRYCOLLECTION
、まず各幾何オブジェクトの種類とそれに対応する幾何構造を決定する必要があります。
拘束されていないジオメトリ タイプ
-
幾何学模様
GEOMETRY は、幾何学的オブジェクトの座標情報を保存および処理するために使用されます。これらの幾何学オブジェクトは、点、線、面、多角形などのさまざまな幾何学的図形にすることができます。MySQL は、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION など、GEOMETRY タイプの複数のサブタイプをサポートします。
MySQL では、GEOMETRY 型を使用して特定の幾何オブジェクトの座標情報を表現し、2 つの GEOMETRY 型データ間の距離を計算したり、点が GEOMETRY 型に含まれるかどうかを判断したりするなど、GIS 関数を使用して処理できます。ジオメトリオブジェクトに記述されたデータ。すべての GEOMETRY タイプに対して、MySQL はこれらのデータを処理および管理できる一連の GIS 関数を提供します。
GEOMETRY タイプごとに、格納および処理の方法が若干異なることに注意してください。例えば、POINT型のGEOMETRYデータの場合はその座標値のみを格納する必要がありますが、POLYGON型のGEOMETRYデータの場合は複数の線分の座標値と、複数の穴の座標値を格納する必要があります。中に閉じ込められる。
他のタイプ
-
ブール値
ブール型には、TRUE と FALSE の 2 つの値しかありません。MySQL では、ブール型は通常、TINYINT(1) データ型を使用して保存されます。TINYINT(1) を使用してブール型を表す場合、0 は FALSE を表し、1 は TRUE を表します。MySQL のブール型は、条件文、比較演算、論理演算で使用できます。
MySQL のブール型と他のデータ型の間の変換規則は若干異なることに注意してください。MySQL では、ブール型を整数に変換する場合、TRUE は 1 に変換され、FALSE は 0 に変換されます。逆に、整数をブール値に変換する場合、0 は FALSE に変換され、その他のゼロ以外の値はすべて TRUE に変換されます。
-
シリアル
MySQL の SERIAL 型は、自己増加する数値シーケンスを格納するために使用される整数型です。通常、各レコードがテーブル内で一意の識別子を持つようにするために、テーブルの主キーとして使用されます。新しいレコードがテーブルに挿入されるたびに、MySQL は SERIAL タイプのフィールドの値を 1 ずつ自動的に増分して、他のレコードと区別するための新しい一意の識別子を生成します。
データが削除されていない場合でも、SERIAL タイプのフィールドは「空」として表示される場合があることに注意してください。たとえば、テーブルに 3 つのレコードを挿入し、2 番目のレコードを削除した場合、次回新しいレコードを挿入するときに、MySQL は ID 2 を再利用するのではなく、レコードの ID を自動的に 4 に設定します。したがって、連続的な自己インクリメントが必要な配列の場合は、SERIAL 型の使用を避け、INT や BIGINT などの他の整数型を使用する必要があります。
Q&A
バイトとビット
バイト (Byte) とビット (Bit) は、コンピューターのストレージとデータ送信の最も基本的な単位です。
- 1 バイトは 8 ビットに相当し、一般的な文字 (文字、数字、句読点など) を表すために使用されます。
- ビットは、コンピュータ情報技術でデータ量を測定するために使用される最も基本的な単位であり、2 進数の 0 と 1 の表現形式です。
コンピュータ システムでは、バイトはデータ量の単位としてよく使用されますが、ビットはコンピュータ ネットワークの送信速度の測定によく使用されます。
MySQL における VARBINARY と BLOB の違い
MySQL では、バイナリ データの格納に VARBINARY と BLOB の両方が使用されます。しかし、それらの間にはまだいくつかの違いがあります。
- VARBINARY は可変長のバイナリ データを格納し、BLOB は大きなバイナリ データを格納します。
- VARBINARY データ型は最大 65,535 バイトをサポートし、BLOB データ型は最大約 4GB のデータをサポートします。
- VARBINARY データ型の場合、MySQL は小さなバイナリ データをより適切に処理できるように最適化されていますが、大きなバイナリ データの場合は BLOB データ型が推奨されます。
したがって、大きなバイナリ データを保存する必要がある場合は、BLOB データ型を使用する必要があり、小さなバイナリ データを保存する必要がある場合は、VARBINARY データ型を使用できます。
可変長と固定長の見方
MySQL では、「可変長」はデータベースに格納されるデータの長さが実際のデータの長さに応じて変化することを意味し、「固定長」はデータベースに格納されるデータが固定長であることを意味します。
具体的には、MySQL では、VARBINARY と VARCHAR は両方とも可変長データ型であり、保存されるデータの長さは可変であるため、データを保存するときにスペースを予約する必要がなく (追加のストレージ オーバーヘッドを除く)、ストレージ スペースが節約されます。固定長データを格納する場合、BINARY 型や CHAR 型などのデータ型が使用できますが、これらの型はデータ長が固定であり、実際の格納データの長さに関係なく占有領域が常に固定されます。さらに、一般に、可変長データ型はテキスト データの保存に適しており、固定長データ型はオーディオ、ビデオ、画像などのバイナリ データの保存に適しています。
CHARとTEXTの違い
MySQL では、VARCHAR と TEXT の両方が文字列型データの保存に使用されます。主な違いは、保存方法と使用シナリオにあります。
- VARCHAR: VARCHARは可変長の文字列型であり、最大長を事前に指定する必要があります。実際に格納されている文字列の長さが最大長よりも短い場合は、実際に必要なストレージ領域のみが占有されます。VARCHAR は、名前やアドレスなど、長さは不確かだが特定の範囲内の文字列を格納するのに適しています。
- TEXT: TEXT 型は、長いテキストを格納するための非常に柔軟なデータ型です。制限を超える文字列を格納でき、最大65535バイトのテキストデータを格納できます。TEXT 型は、記事やコメントなど、VARCHAR で許可される最大長を超えるテキスト データを格納するのに適しています。
VARCHAR は可変長であり、記憶領域を無駄にしないため、文字列型のデータを格納する必要がある場合は VARCHAR 型を使用することをお勧めします。ただし、長いテキスト データの場合は、データの切り捨てやオーバーフローを避けるために、TEXT タイプを使用する必要があります。
MySQL では、VARCHAR 型と TEXT 型の文字列に対するエンコーディング要件は同じです。
MySQL は、ASCII、UTF-8、GB2312 などの複数の文字セット エンコーディングをサポートしています。MySQL では、VARCHAR 型と TEXT 型の両方をこれらの文字セットを使用してエンコードできます。したがって、VARCHAR型、TEXT型を問わず、中国語を含むあらゆる文字を格納することができます。
ただし、VARCHAR または TEXT を使用して Unicode 文字を格納する場合は、UTF-8 エンコーディングを使用する必要があることに注意してください。UTF-8 は可変長の文字エンコード方式であり、Unicode 文字セット内のすべての文字を表すことができ、他のエンコード方式よりも記憶域を節約できます。したがって、MySQL では通常、データの保存と送信に UTF-8 エンコーディングを使用します。
ENUMとSETの違い
MySQL の ENUM と SET は両方とも、一連の事前定義された値でデータ型を表すために使用されますが、使用方法と機能に次のような違いがあります。
- 値の数 ENUM は事前定義された値リストから 1 つの値のみを選択できますが、SET は事前定義された値リストから複数の値を選択できます。
- 格納方法 ENUM は列挙値を整数として格納し、SET は設定値をバイナリ マスクとして格納します。そのため、保管スペースはSETタイプの方が経済的です。
- 値の型 ENUM型の値は文字列型または数値型として扱えますが、SET型の値は文字列型のみとして扱うことができます。
- 拡張性 ENUM 列に新しい列挙値を追加するのは比較的簡単で、新しい事前定義された値を追加するだけです。新しい設定値を SET 列に追加することははるかに複雑で、すべての事前定義された値を再定義する必要があります。
MYSQLの共通時刻関数
MySQL は豊富な時間関数を提供します。次に、一般的に使用される時間関数とその使用法をいくつか示します。
- ADDDATE(): 日付に特定の日数を加算します。
SELECT ADDDATE('2022-06-30', INTERVAL 10 DAY); -- 返回值为 '2022-07-10'
- ADDTIME(): 時刻に特定の時間間隔を加算します。
SELECT ADDTIME('12:30:45', '02:15:20'); -- 返回值为 '14:46:05'
- DATE(): 時刻から日付部分を抽出します。
SELECT DATE('2022-06-30 12:30:45'); -- 返回值为 '2022-06-30'
- TIME(): 時刻から時刻部分を抽出します。
SELECT TIME('2022-06-30 12:30:45'); -- 返回值为 '12:30:45'
- NOW(): 現在の日付と時刻を返します。
SELECT NOW(); -- 返回值为 '2023-05-01 14:17:09'
- TIMESTAMPDIFF(): 2 つの日付/時刻の差を計算します。
SELECT TIMESTAMPDIFF(MINUTE,'2022-06-30 12:30:45','2022-07-01 13:35:50'); -- 返回值为 1425
- DATE_FORMAT(): 日付/時刻を指定された形式にフォーマットします。
SELECT DATE_FORMAT('2022-06-30 12:30:45', '%Y-%m-%d'); -- 返回值为 '2022-06-30'
- STR_TO_DATE(): 文字列を日付/時刻に変換します。
SELECT STR_TO_DATE('2022-06-30', '%Y-%m-%d'); -- 返回值为 '2022-06-30'
- DATE_ADD(): 日付に特定の時間間隔を追加します。
SELECT DATE_ADD('2022-06-30', INTERVAL 1 MONTH); -- 返回值为 '2022-07-30'
SERIALとINTの違い
まず、SERIAL は、自己増加する一連の数値を格納するために使用される特別なタイプの整数です。新しいレコードがテーブルに挿入されるたびに、MySQL は SERIAL タイプのフィールドの値を 1 ずつ自動的に増分して、他のレコードと区別するための新しい一意の識別子を生成します。int型にはこのオートインクリメント機能がありません。
次に、SERIAL 型のフィールドにはデフォルト値が自動的に割り当てられます。テーブルを作成するときに、SERIAL 型フィールドを主キーとして設定し、AUTO_INCREMENT キーワードを使用してその初期値と自己インクリメントを指定できます。このようにして、新しいレコードを挿入すると、MySQL は次に使用可能な値をこのフィールドに自動的に割り当てます。int 型では、手動で値を割り当てる必要があります。
最後に、SERIAL 型のフィールドは特殊な型であるため、その記憶領域のサイズは制限されています。MySQL では、SERIAL 型は通常 4 バイトを占め、1 ~ 4294967295 の範囲の整数を格納できますが、int 型のサイズは必要な範囲に応じて 1 バイトから 8 バイト待機まで柔軟に調整できます。
以上をまとめると、MySQL の SERIAL 型は int 型と比較して、自己インクリメントやデフォルト値の自動割り当てという特殊な機能を持っていますが、記憶容量には限界があります。実際の状況に応じて、データを保存するには適切なデータ型を選択する必要があります。
元のアドレス: https://blog.jiumoz.com/archives/sql-bi-ji-3mysql-shu-ju-lei-xing