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 種類 (個人用および商用)

推薦する

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

さまざまな MySQL テーブルソートルールのエラーの分析

MySQL が複数のテーブルを結合するときに、次のエラーが報告されます: [Err]1267 – 操...

CocosCreator でレイヤー管理に常駐ノードを使用する方法

CocosCreator バージョン: 2.3.4ほとんどのゲームにはレイヤー管理機能があり、例えば...

Vueはブラウザ側のコードスキャン機能を実装します

背景少し前にブラウザカメラの取得とスキャンコード認識の機能を作りました。その際の知識ポイントと具体的...

MySQL 8.0 redo ログの詳細な分析

目次序文REDOログの生成REDOログ送信REDOログの保存と通知ユーザースレッドに通知要約する序文...

JavaScript でタブバーの切り替え効果を実装する

フロントエンド開発者が必ず知っておくべきケースとして、タブバーの切り替え効果があります。タブバー自体...

MySQLがブール型を返すいくつかの状況について簡単に説明します。

mysqlはブール型を返します最初のケースでは、直接戻ります select id='22a...

CocosCreatorを使ってシューティングゲームを作る方法

製造手順を分析します。 1. リソースを準備してシーンを構築するオンラインでリソースを探すか、私のリ...

MySQLの挿入文字化け問題を解決する方法

問題の説明: MySQL に中国語の文字を挿入する場合、または MySQL では中国語の文字が正常に...

Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...

IIS7 IIS8 http は自動的に HTTPS にジャンプします (ポート 80 はポート 443 にジャンプします)

IIS7 では、「URL REWRITE2」疑似静的モジュールがインストールされているかどうかを確...

Vueはechartsに基づいて3次元の縦棒グラフを実装します

3次元縦棒グラフは、正面、右側、上部の3つの部分で構成されています。描画するときは、正面をグラフィッ...

Reactは動的ポップアップウィンドウコンポーネントを実装します

UI コンポーネントを作成するときに、アニメーションを考慮しなければ、アニメーションを実現するのは非...

960 グリッドシステムの基本原理と使用法

もちろん、CSS はフレームワークを必要とするほど高度ではないと考えて、反対の意見を持つ人もたくさん...

Linux SSHポートを転送する3つの方法

ssh は私が最も頻繁に使用する 2 つのコマンドライン ツールのうちの 1 つです (もう 1 つ...