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

推薦する

JS の精度外数値問題の解決

精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...

ウェブサイトのフロントエンドをエレガントでユーザーにとって魅力的なものにする方法

ウェブフロントエンドのウェブサイトの気質は感情であり、言葉なしでユーザーを魅了できる感情です。では、...

Centos7にGitLabサーバーをインストールして展開する方法

私はここでCentOS 7 64ビットシステムを使用しています。CentOS 64ビットシステムを試...

Windows 10 で MySQL を完全にアンインストールして再インストールするための詳細な手順

さまざまな理由で、誰もが MySQL を再インストールする必要があると思います。 MySQL と Q...

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

Vue のミックスインの使用方法の詳細な説明

目次序文1. Mixin とは何ですか? 2. Mixin はいつ使用すればよいですか? 3. Mi...

Tencent Cloud Server Tomcat ポートにアクセスできない場合の解決策

最近、Tencent Cloudを使用してサーバーを設定しました。使用中に、tomcatポートにアク...

Linux のスケジュールされたタスクの crontab のインストールと使用の詳細な説明

crontabをインストールするyum install crontabs CentOS 7が付属して...

WeChatアプレットはビデオプレーヤーのビデオコンポーネントを使用します

この記事の例では、WeChatアプレットのビデオプレーヤーコンポーネントの具体的なコードを参考までに...

Linux サーバーで MySQL リモート接続を有効にする方法

序文以前の非MKレコードを再編成するためのMySQLの学習説明する有効になっていない場合、データベー...

XHTML+CSS Web ページ作成における美しいスタイルシートの適用

これはかなり前に書かれた記事です。今となっては、その中の考え方は学ぶ価値があるように思えます。jb5...

Blazor における CSS 分離の問題

1. 環境VS 2019 16.9.0 プレビュー 1.0 .NET SDK 5.0.100 2. ...

NextCloud プライベート クラウド ストレージ ネットワーク ディスクの構築に関する詳細なチュートリアル

Nextcloud は、オープンソースで無料のプライベート クラウド ストレージ ネットワーク ディ...

favico.ico---ウェブサイトicoアイコン設定手順

1. 正常に生成されたアイコン ファイルをダウンロードし、名前を favico.ico に変更して、...

フォーム要素とプロンプトテキストが揃っていない問題

最近のプロジェクトでは、多くのフォーム、特にチェックボックスとラジオボタンの作成が含まれます。しかし...