MySQL 5.7 共通データ型

MySQL 5.7 共通データ型

——「MySQL in Simple Terms (第 2 版)」からのメモ

数値型

整数型バイト最小最大
小さな1符号付き -128; 符号なし 0署名あり 127; 署名なし 255
スモールイント2符号付き -2^16; 符号なし 0符号付き 2^16-1; 符号なし 2^17-1
ミディアムミント3符号付き -2^24; 符号なし 0符号付き 2^24-1; 符号なし 2^25-1
整数\整数4符号付き -2^32; 符号なし 0符号付き 2^32-1; 符号なし 2^33-1
ビッグイント8符号付き -2^64; 符号なし 0符号付き 2^64-1; 符号なし 2^65-1

浮動小数点型バイト最大最小
フロート4
ダブル8

固定小数点数型バイト説明する
DEC(M,D)\DECIMAL(M,D) 2 番目最大値の範囲は DOUBLE と同じです。特定の DECIMAL の有効な値の範囲は、M と D によって決まります。

ビットタイプバイト最小最大
ビット(M) 1〜8ビット(1)ビット(8)

整数型

整数型の場合、MySQL は型名の後に(n)を使用して表示幅を指定することをサポートしています。たとえば、 int(5)値の幅が 5 桁未満の場合に、数値の前に幅が埋め込まれることを意味します。指定された幅が表示されない場合、デフォルトはint(11)です。これは通常、ゼロフィル(「0」で埋める)と一緒に使用されます。

例:

-- id1 と id2 の 2 つのフィールドを持つテーブル t1 を作成し、値の幅をそれぞれ int と int(5) として指定します。
mysql> テーブル t1 (id1 int,id2 int(5)) を作成します。
mysql> desc t1; 

--id1とid2の両方に値1を挿入します
mysql> t1 の値 (1,1) に挿入します。
mysql> t1 から * を選択します。 

-- id1 フィールドと id2 フィールドにそれぞれ zerofill パラメータを追加します。mysql> alter table t1 modify id1 int zerofill;
mysql> テーブル t1 を変更し、 id2 を int(5) でゼロフィルします。 

幅制限を設定した後、幅制限より大きい値を挿入しても、挿入されたデータには影響はなく、データは引き続き型のブック精度に従って保存されます。この時点では、幅のフォーマットは実際には意味がなく、左側に「0」文字は入力されません。

--テーブル t1 の id1 に 1 を挿入し、id2 に 12345678 を挿入します。
mysql> t1 に値 (1,12345678) を挿入します。
mysql> t1 から * を選択します。 

すべての整数型には、オプション属性UNSIGNED (符号なし) があります。フィールドに負でない数値を格納する必要がある場合、またはより大きな上限値が必要な場合は、このオプションを使用できます。列がゼロフィルとして指定されると、MySQL は列に UNSIGNED 属性を自動的に追加します。

さらに、整数型には独自のAUTO_INCREMENT属性もあり、この列の値は自動増分であることを意味します。 AUTO_INCREMENT 値は通常 1 から始まり、行ごとに 1 ずつ増加します。 AUTO_INCREMENT 列に NULL を挿入すると、MySQL は列の現在の最大値より 1 大きい値を挿入します。テーブルには最大 1 つの AUTO_INCREMENT 列を含めることができます。

AUTO_INCREMENT を使用する列は、NOT NULL および UNIQUE として定義する必要があります。

浮動小数点型

MySQL では、小数の表現を浮動小数点数と固定小数点数の 2 つのタイプに分類します。浮動小数点数には float (単精度) と double (倍精度) が含まれますが、固定小数点数には小数点数のみが含まれます。固定小数点数は、MySQL では文字列として保存されます。固定小数点数は浮動小数点数よりも精度が高く、通貨などの高精度データを表すのに適しています。

浮動小数点数と固定小数点数はどちらも、型名の後に「(M,D)」を追加することで表すことができます。「(M,D)」は、値が合計 M 桁、小数点 D 桁で表示されることを意味します。 MySQL は浮動小数点値を保存するときに、余分な桁を切り捨てます。したがって、123.006 を float(5,3) に挿入すると、格納される値は 123.01 になります。 float と double の精度が指定されていない場合、デフォルトは実際のハードウェアとオペレーティング システムによって決定されます。decimal が指定されていない場合、デフォルトの整数桁は 10 で、小数桁は 0 です。

例:

--テーブル tf を作成し、フィールド id1、id2、id3 をそれぞれ float(5,2)、double(5,2)、decimal(5,2) に設定します。
mysql> テーブル tf( id1 float(5,2),id2 double(5,2),id3 小数点以下(5,2)); を作成します。 

--表1.23の3つのフィールドにデータを挿入します
mysql> tf に値 (1.23,1.23,1.23) を挿入します。 

--データ1234.005をそれぞれテーブルに挿入します
mysql> tf に値 (1234.005,1234.005,1234.005) を挿入します。 

--データ123.005をそれぞれテーブルに挿入します
mysql> tf に値 (123.005,123.005,123.005) を挿入します。 

--データ123.006、123.006、123.004をそれぞれテーブルに挿入します
mysql> tf に値 (123.006,123.006,123.004) を挿入します。 

--テーブルのtfフィールドの精度を削除し、1.23を再挿入します
mysql> テーブルを変更して tf id1 float を変更します。
mysql> テーブルを変更して tf id2 を double に変更します。
mysql> テーブルを変更して tf id3 10 進数を変更します。
mysql> tf に値 (1.23,1.23,1.23) を挿入します。
mysql> desc tf; 

--テーブルに 1.234567123321、1.234567123321123321、1.23234233 を挿入します
mysql> tf に値を挿入します (1.234567123321,1.234567123321123321,1.23234233); 

ビットタイプ

BIT 型の場合、ビット フィールド値を格納するために使用されます。BIT(M) は、マルチビットの 2 進数を格納するために使用できます。M の範囲は 1 ~ 64 です。記述しない場合は、デフォルトは 1 ビットです。 SELECT コマンドを直接使用した場合、クエリの結果は表示されません。結果を読み取るにはbin() (2 進数で表示) 関数またはhex() (16 進数で表示) 関数を使用する必要があります。

例:

--テーブルtbを作成し、フィールドid1をbit(1)、id2をbitとして定義します。
mysql> テーブル tb(id1 ビット(1),id2 ビット); を作成します。 

--tbに1,1を挿入
mysql> tb に値 (1,1) を挿入します。
mysql> tb から * を選択します。
mysql> tbからbin(id1),hex(id2)を選択します。 

ビット フィールドにデータを挿入する場合、最初にバイナリに変換されます。ビット数が許容範囲内であれば、データは正常に挿入されます。ビット数が定義されたビット数を超える場合、データは挿入されません。

時間タイプ

MySQL には、日付と時刻を表すために使用できる多くのデータ型があります。次の表は、MySQL 5.0 でサポートされているすべての日付と時刻の型を示しています。

日付と時刻の種類バイト最小最大
日付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

各時間タイプには有効な範囲があります。この範囲を超えると、システムはデフォルトの SQLMode でエラーをプロンプトし、ゼロ値で保存します。

データ型

値がゼロの場合は、DATE0000-00-00DATETIME0000-00-00 00:00:00TIMESTAMP000000000000000TIME00:00:00YEAR0000 を意味します。

--テーブル tdt を作成します
mysql> テーブル tdt(dt date, dttm datetime, tms timestamp,tm time,yr year); を作成します。 

--now() 関数を使用して、現在の時刻をテーブルに挿入します。mysql> insert into tdt values(now(),now(),now(),now(),now()); 

--tms に NULL を挿入すると、MySQL はシステム時間を自動的に割り当てます。mysql> insert into tdt(tms) values(null); 

MySQL は、テーブルの最初の TIMESTAMP フィールドにのみシステム時間を割り当てます。他のフィールドがある場合は、値 0 が割り当てられます。

--テーブルtdtを変更し、TIMESTAMP型のtms1列を追加し、tmsとtms1にnull値を割り当てます
mysql> テーブル tdt を変更し、 tms1 タイムスタンプを追加します。
mysql> desc tdt;
mysql> tdt(tms,tms1) に値(null,null) を挿入します。 

TIMESTAMP の重要な特徴は、損失に関連していることです。日付を挿入する場合、保存される前にローカル タイム ゾーンに変換されます。データベースから日付を取得する場合、日付を表示する前にローカル タイム ゾーンに変換する必要があります。

--フィールドtms、dtを含むテーブルtdt1を作成します
mysql> テーブル tdt1(tms timestamp,dt datetime) を作成します。 

--現在のタイムゾーンを表示し、システム時間をテーブルに挿入します tdt1mysql> show variables like 'time_zone';
mysql> tdt1 に値を挿入します (now()、now()); 

タイムゾーンの値はSYSTEMあることがわかります。この値は、デフォルトでホストのタイムゾーンと一致しています。中国にあるため、実際は East 8 (+8:00) です。

-- タイムゾーンを East 9th District に変更し、tdt1 の時間を再度確認します。mysql> set time_zone='+9:00'; 

文字列型

MySQL は、バージョンに応じて異なる、文字列データ用のさまざまなストレージ タイプを提供します。 5.0 を例にとると、MySQL にはCHARVARCHARBINARYVARBINARYBLOBTEXTENUMSETが含まれます。

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

方法

CHAR と VARCHAR

これら 2 つは非常に似ており、どちらも MySQL で短い文字列を保存するために使用されます。 2 つの主な違いは保存方法です。CHAR 列の長さはテーブルの作成時に宣言された長さに固定されますが、VARCHAR 列の値は可変長文字列です。検索時に、CHAR は末尾のスペースを削除しますが、VARCHAR は削除しません。

-- 2つのフィールド ch (char(6)) と vc (varchar(6)) を含むテーブル tc を作成します。
mysql> テーブル tc (ch char(6),vc varchar(6)) を作成します。
--ch および vc フィールドに 'abc' を挿入します
mysql> tc に値を挿入します ('abc ','abc ');
-- フィールドの長さを照会します。mysql> select length(ch),length(vc) from tc; 

BINARY と VARBINARY

CHAR および VARCHAR に似ていますが、バイナリ文字列を格納する点が異なります。

--フィールドbc (binary(6))、vbc (varbinary(6))を含むテーブルtbcを作成します。
mysql> テーブル tbc (bc binary(6),vbc varbinary(6)) を作成します。
--テーブルにデータを挿入します ('a ','a ')
mysql> tbc に値を挿入します ('a ','a ');
--フィールド値の長さを表示します。mysql> select length(bc),length(vbc) from tbc; 

BINARY 値を保存する場合、MySQL は指定されたフィールド定義の長さに合わせて値に0x00 (ゼロ バイト) を埋め込みます。

-- hex() 関数を使用して、tbcmysql> select length(bc),length(vbc) from tbc; に保存されているデータを表示します。 

ENUM型

列挙型の値の範囲は、テーブルを作成するときに列挙を通じて明示的に指定する必要があります。1255 個のメンバーの列挙の場合、1 バイトのストレージが必要です。25665535 個のメンバーの列挙の場合、2 バイトのストレージが必要です。最大 65535 人のメンバーが許可されます。

--フィールド f1 (enum('a','b','c')) を含むテーブル te を作成します。
mysql> テーブル te(f1 enum('a','b','c')) を作成します。
-- テーブルに複数のレコードを挿入しますmysql> insert into te values('a'),('B'),('3'),(null); 

ENUM では大文字と小文字は区別されません。また、添え字を使用したデータの挿入もサポートしています (1 から始まり、添え字が範囲外の場合はエラーが報告されます)。特殊な値'0'は null 値を表します。

SET型

SET は ENUM と非常によく似ており、0 ~ 64 個のメンバーを含めることができる文字列オブジェクトでもあります。ストレージはメンバー数に応じて異なります。

1〜8個のメンバーのセットは1バイトを占めます

9〜16のメンバーのセットは2バイトを占めます

17~24個のメンバーのセットは3バイトを占める

25~32のメンバーのセットは4バイトを占めます

32~64のメンバーのセットは8バイトを占めます

さらに、SET タイプでは一度に複数のメンバーを選択できます。

--フィールド f1 を含むテーブル ts を作成します (set())
mysql> テーブル ts を作成します (f1 set('a','b','c','d'));
mysql> ts に値 ('a,b'),('a,d'),('b,c,d') を挿入します。 

--テーブルにデータを挿入します ('a,b,a,c,d,d')
mysql> ts に値を挿入します ('a,b,a,c,d,d')。 

SET型は、許容値セットから任意の数の要素を選択して組み合わせることができるため、入力値が許容値の組み合わせ範囲内であれば、SET型の列に正しく記録できます。許容範囲外の値の場合、エラーが報告されます。重複するメンバーを含むセットは自動的に重複が排除されます。

MySQL 5.7 の一般的なデータ型に関するこの記事はこれで終わりです。MySQL データ型の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySql データ型チュートリアル例の詳細な説明
  • MySQLはIDに適切なデータ型を選択します
  • MySQL データ型の選択原則
  • mysql 10進データ型変換の実装
  • mysql データ型変換の実装
  • MySQL データ型 DECIMAL の使用方法の詳細な説明
  • MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明
  • MySQL データ型の詳細

<<:  Linux チェックアップ、Linux の状態 (ネットワーク IO、ディスク、CPU、メモリ) を把握

>>:  初心者向け入門講座⑧:記事サイトを簡単に作る

推薦する

HTML Web ページ リスト タグ学習チュートリアル

HTML Web ページ リスト タグの学習チュートリアル。 HTML ページでは、リストはアウトラ...

NodeJSのモジュール性に関する詳細な説明

目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...

CentOS インストール mysql5.7 詳細チュートリアル

この記事では、参考までに、centOSにmysql5.7をインストールする詳細な手順を紹介します。具...

JavaScript で文字列内の最長の単語を見つける 3 つの方法 (推奨)

この記事は、Free Code Camp の基本アルゴリズム スクリプト「文字列内の最長の単語を見つ...

HTML テーブルタグチュートリアル (24): 行の水平方向の配置属性 ALIGN

水平方向では、行の配置を左、中央、右に設定できます。基本的な構文<TR ALIGN="...

vuex データの永続化のための 2 つの実装ソリューション

目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...

js を使用して年カルーセル選択効果をネイティブに実装する例

序文js を使用して、年の回転選択効果を実現します。では早速、写真を見てみましょう。 1. アイデア...

MySQL インデックスクエリ最適化スキルを習得するための記事

序文この記事では、DBA がいないチームが参考にできるように、MySQL の一般的な使用に関するヒン...

数千万のMySQLデータ量を素早くページ分割する方法

序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク IO のオーバーヘッドが...

Docker を使用した nextcloud パーソナル ネットワーク ディスクの構築に関するチュートリアル

目次1. はじめに2. 導入環境ツール4. 展開プロセス要約する1. はじめにNextcloud は...

js を使用して画像をモザイク化する方法の例

この記事では、主に js を使用して画像をモザイク化する方法の例を紹介し、次のように共有します。効果...

WeChatミニプログラムはuni-appを通じて世界中に共有されます

実際の使用では、ミニプログラムを友人や友人サークルと共有する必要があることが多く、通常は一度に 1 ...

Mac OS10.12 に mysql5.7.18 をインストールするチュートリアル

ウェブ全体を検索して、さまざまな落とし穴を見つけましたが、問題は解決しませんでした。ついに自分でも分...

ウェブページを作成するために最もよく使用されるHTMLタグ

1. よく使われるHTMLタグの最適化HTML は Web 編集者にとって基本的なスキルであるべきで...

CSSカスタムプロパティの予備的な理解

現在、CSS プリプロセッサは Web 開発の標準となっています。 プリプロセッサの主な利点の 1 ...