MySQL データ型の詳細

MySQL データ型の詳細

1. 数値型

1.1 数値型の分類

  • 厳密な数値型 ( INTEGERSMALLINTDECIMALNUMERIC )
  • 近似数値データ型 ( FLOATREALDOUBLE PRECISION )

MySQL の数値型:

整数型バイト最小最大
小さな
1
署名済み -128
符号なし 0
署名 127
符号なし 255
スモールイント
2
署名 -32768
符号なし 0
署名 32767
署名なし 65535
ミディアムミント
3
署名 -8388608
符号なし 0
署名 8388607
署名なし 1677215
整数、整数
4
署名 -2147483648
符号なし 0
署名 2147483647
署名なし 4294967295
ビッグイント
8
署名 -9223372036854775808
符号なし 0
署名 9223372036854775807
署名なし 18446744073709551615
浮動小数点型
バイト
最小最大
フロート
4
±1.175494351E-38
±3.402823466E+38
ダブル
8
±2.2250738585072014E-308
±1.7976931348623157E+308
固定小数点数型
バイト説明する
DEC(M,D)、
10進数(M,D)
2 番目
値の最大範囲はDOUBLEと同じです。与えられたDECIMALの有効な値の範囲はMとDによって決まります。
決める
ビットタイプ
バイト
最小最大
ビット(M)
1~8
ビット(1)
ビット(64)

1.1.1 浮動小数点数

浮動小数点数の場合、精度とスケールが記述されていない場合は、実際の精度値に従って表示されます。精度とスケールが記述されている場合は、丸められた結果が自動的に挿入され、システムはエラーを報告しません。固定小数点数の場合、精度とスケールが記述されていない場合は、デフォルト値のdecimal(10,0)に従って演算が実行され、データが精度とスケールの値を超えると、システムはエラーを報告します。

1.1.2 ビットタイプ

BIT (ビット) タイプ: 範囲は 1 ~ 64 です。設定されていない場合、デフォルトは 1 ビットです。このフィールドでは、select コマンドを直接使用しても結果は表示されません。bin() (バイナリ形式で表示) または hex() (16 進形式で表示) 関数を使用して読み取ることができます。

例:

mysql> desc t2;
+-------+--------+------+------+--------+-------+
| フィールド | タイプ | Null | キー | デフォルト | 追加 |
+-------+--------+------+------+--------+-------+
| id | ビット(1) | はい | | NULL | |
+-------+--------+------+------+--------+-------+
セット内の 1 行 (0.00 秒)

mysql> t2 に値を挿入します(1);
クエリは正常、1 行が影響を受けました (0.05 秒)

mysql> t2 から * を選択します。
+------+
|id|
+------+
| |
+------+
セット内の 1 行 (0.00 秒)

mysql> t2 から bin(id),hex(id) を選択します。
+---------+---------+
| bin(id) | hex(id) |
+---------+---------+
| 1 | 1 |
+---------+---------+
セット内の1行(0.03秒)

bit型データを挿入する場合、まず値はバイナリに変換されます。許可されている場合は挿入されます。桁数が実際に定義された桁数より少ない場合、挿入は失敗します。

たとえば、今テーブルに 2 を挿入すると、実際のバイナリ値は 10 になり、 bit(1)数を超えるため、例外が報告されます。 id を bit(2) として定義すると、挿入は成功します。

mysql> t2 に値を挿入します(2);
エラー 1406 (22001): 行 1 の列 'id' のデータが長すぎます
mysql> テーブル t2 を変更して ID ビットを変更します(2);
クエリは正常、1 行が影響を受けました (0.67 秒)
記録: 1 重複: 0 警告: 0

mysql> t2 に値を挿入します(2);
クエリは正常、1 行が影響を受けました (0.03 秒)

mysql> t2 から bin(id),hex(id) を選択します。
+---------+---------+
| bin(id) | hex(id) |
+---------+---------+
| 1 | 1 |
| 10 | 2 |
+---------+---------+
セット内の 2 行 (0.00 秒)

1.1.3 時間と日付の種類

1.1.3 時間と日付の種類

日付と時刻の種類バイト最小最大
日付
4
1000-01-01
9999-12-31
日時
8
1000-01-01 00:00:00
9999-12-31 23:59:59
タイムスタンプ
4
19700101080001
2038年頃
時間
3
-838:59:59
838:59:59
1 1901
2155
  • DATE : 年、月、日を示すために使用されます
  • DATETIME : 年、月、日、時、分、秒を表すために使用されます (サポートされている挿入形式: 2007-9-3 12:10:10'、'2007/9/3 12+10+10'、'20070903121010'、20070903121010 など)
  • TIME : 時間、分、秒を示すためにのみ使用されます
  • TIMESTAMP : 日付を現在のシステム時間に頻繁に挿入または更新します
  • YEAR : 年を示す

例1:日付、時刻、日時の3つの日付タイプを持つタイムテーブル(dt)を作成し、値を挿入して表示される結果を確認します。

mysql> テーブル dt(d 日付、t 時刻、dt 日付時刻) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.23 秒)


mysql> dt に値を挿入します (now(),now(),now());
クエリは正常、1 行が影響を受け、1 つの警告 (0.05 秒)

mysql> dt から * を選択します。
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2021-05-13 | 10:14:07 | 2021-05-13 10:14:07 |
+------------+----------+---------------------+
セット内の 1 行 (0.00 秒)

例2:テストテーブルtを作成し、フィールドid1をTIMESTAMP型に設定し、null値を挿入して表示する

mysql> テーブル t(id1 タイムスタンプ) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.22 秒)

mysql> t 値に挿入します(null);
クエリは正常、1 行が影響を受けました (0.05 秒)

mysql> t から * を選択します。
+---------------------+
| id1 |
+---------------------+
| 2021-05-13 10:18:05 |
+---------------------+
セット内の 1 行 (0.00 秒)

システムが id1 のデフォルト値CURRENT_TIMESTAMP (システム日付) を自動的に作成していることがわかります。 ( MySQLテーブルの最初のTIMESTAMPフィールドのデフォルト値のみをシステム日付に設定することに注意してください。2 番目のTIMESTAMPタイプがある場合、デフォルト値は 0 に設定されます。)

例3:上記の説明と同じ

mysql> テーブル t を変更し、列 id2 タイムスタンプを追加します。
クエリは正常、影響を受けた行は 0 行 (0.48 秒)
レコード: 0 重複: 0 警告: 0

mysql> show テーブル t \G;
************************** 1. 行 ****************************
       表: t
テーブルの作成: CREATE TABLE `t` (
  `id1` タイムスタンプ NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP、
  `id2` タイムスタンプ NULL ではない デフォルト '0000-00-00 00:00:00'
) エンジン=InnoDB デフォルト文字セット=latin1
セット内の 1 行 (0.00 秒)

エラー:
クエリが指定されていません

1.1.4 文字列型

文字列型バイト説明と保管要件
魅力)
Mは0から255までの整数です
可変長文字(M)
Mは0から65535までの整数で、値の長さ+1バイトです。
タイニーブロブ
許容される長さは0~255バイト(値の長さ+1バイト)です。
ブロブ
許容される長さは0~65535バイトで、値の長さ+2バイトです。
ミディアムブロブ
許容される長さは0~167772150バイト(値の長さ+3バイト)です。
ロングロブ
許容される長さは0~4294967295バイト(値の長さ+4バイト)です。
小さなテキスト
許容される長さは0~255バイトで、値の長さ+2バイトです。
文章
許容される長さは0~65535バイトで、値の長さ+2バイトです。
中テキスト
許容される長さは0~167772150バイト(値の長さ+3バイト)です。
長文
許容される長さは0~4294967295バイト(値の長さ+4バイト)です。
VARBINARY(M)
0~Mバイトの可変長バイト文字列(値の長さ+1バイト)を許可します。
バイナリ(M)
長さ0からMバイトまでの固定長バイト文字列が許可されます

  • CHAR : 固定長。検索時に末尾のスペースは削除されます。
  • VARCHAR : 可変長文字列。検索時にこれらのスペースは保持されます。

例:

mysql> テーブルvarc(v varchar(4),c char(4))を作成します。
クエリは正常、影響を受けた行は 0 行 (0.20 秒)

mysql> varc に値を挿入します ('abc ','abc ');
クエリは正常、1 行が影響を受けました (0.03 秒)

mysql> varc から length(v),length(c) を選択します。
+-----------+------------+
| 長さ(v) | 長さ(c) |
+-----------+------------+
| 4 | 3 |
+-----------+------------+
セット内の1行(0.01秒)
mysql> varc から concat(v,'+'),concat(c,'+') を選択します。
+---------------+---------------+
| 連結(v,'+') | 連結(c,'+') |
+---------------+---------------+
| abc + | abc+ |
+---------------+---------------+
セット内の 1 行 (0.00 秒)

  • BINARY : charに似ていますが、バイナリ文字列です。
  • VARBINARY : varcharに似ていますが、バイナリ文字列を格納します。

例:

mysql> テーブルbina(c binary(3))を作成します。
クエリは正常、影響を受けた行は 0 行 (0.22 秒)

mysql> t に挿入し、c='a' を設定します。
エラー 1054 (42S22): 「フィールド リスト」に不明な列 'c' があります
mysql>binaにc='a'とセットで挿入します。
クエリは正常、1 行が影響を受けました (0.05 秒)

mysql> bina から *,hex(c),c='a',c='a\0',c='a\0\0' を選択します。
+------+--------+--------+---------+-----------+
| c | 16進数(c) | c='a' | c='a\0' | c='a\0\0' |
+------+--------+--------+---------+-----------+
| 610000 | 0 | 0 | 1 |
+------+--------+--------+---------+-----------+
セット内の 1 行 (0.00 秒)

BINARY値を保存すると、指定されたフィールド定義の長さに達するまで、値の末尾に「0x00」(ゼロ バイト) が埋め込まれることがわかります。上記の例からわかるように、 BINARY(3)列の場合、挿入時に「a」は「a\0\0」になります。

1.1.5 ENUM型

ENUM : 1 ~ 255 のメンバーの列挙には 1 バイトのストレージが必要です。255 ~ 65535 のメンバーの場合は 2 バイトのストレージが必要です。

例:

mysql> テーブル gend(性別 enum('M','F')) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.20 秒)

mysql> gend に値 ('M'),('F'),('1'),(null); を挿入します。
クエリは正常、4 行が影響を受けました (0.03 秒)
記録: 4 重複: 0 警告: 0

mysql> gendから*を選択します。
+--------+
|性別|
+--------+
| マ |
| ふ |
| マ |
| NULL |
+--------+
セット内の 4 行 (0.00 秒)

このことから、列挙型の値を挿入するときには大文字と小文字は無視され、最初の添え字は 1 から始まることがわかります。クエリを実行すると大文字に変換され、null も挿入される可能性があります。

1.1.6 SET型

SET : 64 個のメンバーを含めることができる文字列オブジェクト。メンバーごとに保存方法が異なります。

1 バイトを占める 1 ~ 8 個のメンバーのセット。
2 バイトを占める 9 ~ 16 個のメンバーのセット。
3 バイトを占める 17 ~ 24 個のメンバーのセット。
4 バイトを占める 25 ~ 32 個のメンバーのセット。
8 バイトを占める 33 ~ 64 個のメンバーのセット。
SetEMUNの違いは、Setは一度に複数のメンバーを選択できるのに対し、ENUMは1つしか選択できないことです。

例:

mysql> テーブル st(col set('a','b','c','d')) を作成します。
クエリは正常、影響を受けた行は 0 行 (0.20 秒)

mysql> st に値 ('a,b')、('a,d,a')、('a,c')、('a') を挿入します。
クエリは正常、4 行が影響を受けました (0.03 秒)
記録: 4 重複: 0 警告: 0

mysql> st に値を挿入します('f');
エラー 1265 (01000): 行 1 の列 'col' のデータが切り捨てられました
mysql> st に値 (null) を挿入します。
クエリは正常、1 行が影響を受けました (0.03 秒)

mysql> st から * を選択します。
+------+
| 列 |
+------+
| a,b |
| a,d |
| ア、ハ |
| ア |
| NULL |
+------+
セット内の行数は 5 です (0.00 秒)

このことから、set は複数のメンバーを挿入でき、null も挿入できることがわかります。存在しない定義列を挿入すると、例外が報告され、挿入は失敗します。

以下もご興味があるかもしれません:
  • MySQLデータベースの基礎知識
  • MySQLの整数データ型tinyintの詳細な説明
  • MySql データ型チュートリアル例の詳細な説明
  • MySQL データ型の選択原則
  • MySQL データベースの操作とデータ型

<<:  LinuxでIPアドレスを手動で設定するための詳細な手順

>>:  ダウンロードにおすすめの氷と雪のフォント 33 種類 (個人用および商用)

推薦する

MySQL ストアド プロシージャの権限の問題の概要

MySQL ストアド プロシージャは、確かに、非常にまれな使用シナリオのように見えます。この問題は、...

Vueは画像のドラッグアンドドロップ機能を実装します

この記事の例では、画像のドラッグアンドドロップ機能を実現するためのVueの具体的なコードを参考までに...

EF (Entity Framework) の挿入または更新データ エラーの解決方法

エラー メッセージ:ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与...

Nginx メモリプールのソースコード分析

目次メモリプールの概要1. nginxデータ構造2. nginxはOSからスペースngx_creat...

HTML テーブルタグチュートリアル (44): テーブルヘッダータグ

<br />ソース コード内で表の構造を明確に区別するために、HTML 言語では、表のヘ...

MySQL Workbench の使い方チュートリアルの詳しい説明

目次(I) Workbenchを使用してデータベースを操作する①データベースを作成する② データベー...

vue+springbootでログイン機能を実現

この記事の例では、ログイン機能を実現するためのvue+springbootの具体的なコードを参考まで...

ランキングを取得するためのMySQLソートの例コード

コードは次のようになります。 SELECT @i:=@i+1 行番号、 if(@total=t.s_...

RHEL8 で静的 IP アドレスを設定するさまざまな方法の簡単な分析

Linux サーバーで作業している場合、ネットワーク カード/イーサネット カードに静的 IP アド...

Ubuntu Linuxシステムをインストールするときにハードディスクをパーティション分割する最も合理的な方法の詳細な説明

Windows または Linux オペレーティング システムをインストールするかどうかに関係なく、...

MySQLの結合クエリ、ユニオンクエリ、サブクエリの原理と使用例の詳細な説明

この記事では、例を使用して、MySQL の結合クエリ、結合クエリ、サブクエリの原理と使用方法を説明し...

CSSはフロートをシミュレートして、画像の左右を囲む中央テキストの効果を実現します。

画像の周囲にテキストを折り返すとは何ですか?これは次の図の効果です。 エフェクトのCSSコードはここ...

MySQLでユーザーを作成し、権限を管理する方法

1. ユーザーとパスワードの作成方法1. MySQLデータベースに入る mysql> mysq...

iframe src 割り当ての問題 (サーバー側)

今日この問題に遭遇しました。サーバー側でiframeのsrc値を再割り当てし、iframeにIDを追...

WeChatミニプログラムの基本チュートリアル:Echartの使用

序文まずは最終的な効果を見てみましょう。私が自分で作った小さなデモです。まずEChartsの公式サイ...