はじめに
SQL文についての記事でデータ型について軽く触れようと調べた際に
そもそも知らない型があるな?となったので、改めて調べてアウトプットしていこうと思います。
全てを網羅したわけではないので悪しからず!
文字列型
| 型 | 種類 | 値の範囲 | 
|---|---|---|
| CHAR(m) | 固定長 | m:0~255文字 指定された長さになるよう末尾が空白で埋められ、 値が格納、取得される時は空白は削除される | 
| VARCHAR(m) | 可変長 | m:0~65,535文字 末尾に空白を含む文字列を格納すると末尾の空白は削除されず、 格納、取得される時は空白を含む | 
※固定長:データの文字数が決まっていること(商品コードや郵便番号など)
※可変長:データの文字数が決まっていないこと(氏名や商品名など)
バイナリ型
| 型 | 種類 | 値の範囲 | 
|---|---|---|
| BINARY(m) | 固定長 | m:0~255バイト 指定された長さになるよう末尾が0x00で埋められる。 値が格納、取得される時は0x00は削除されない | 
| VARBINARY(m) | 可変長 | m:0~65,535バイト 末尾に0x00は格納されない | 
0x00とは
冒頭2桁の0xは16進数であることを示していて、後の数字で数字やアルファベット、特定の意味を持つ。
文字コード表に当てはめて考えると、0x00はNULという意味になる。
バイトとは
コンピューターの情報量を表すときに使用される単位。
1バイト=半角英数字1文字分の情報量で、全角文字の場合は1文字で2バイトとなる。
1バイト=8ビット(bit)。
- 1KB(キロバイト)= 1,024 Byte
- 1MB(メガバイト)= 1,024 KB
- 1GB(ギガバイト)= 1,024 MB
- 1TB(テラバイト)= 1,024 GB
ちょっと(だいぶ)蛇足
過去にPC修理センターで働いてる時、度々STOPエラーを見かけることがあったけど、
あのコードは16進数を表してたんだなぁと今更ながらに知りました(笑)
これはこれでパズルみたいで紐解くの楽しそうなので、そのうち少し掘り下げて調べてみようと思います。
バイトに関してもメモリだったりHDD容量でよく見かけたなぁと。すっかり忘れてました。
BLOB型、TEXT型について
| 型 | 最大バイト | 
|---|---|
| TINYBLOB | 255 | 
| BLOB | 65,535 | 
| MEDIUMBLOB | 16,777,215 | 
| LONGBLOB | 4,294,967,295 | 
| TINYTEXT | 255 | 
| TEXT | 65,535 | 
| MEDIUMTEXT | 16,777,215 | 
| LONGTEXT | 4,294,967,295 | 
それぞれ巨大なバイナリデータ(画像ファイルなど)とテキストデータを格納する時に利用される。
BLOB 型はバイナリデータを扱うデータ型で、格納できるデータのサイズを指定しないが、最大長は決まっている。
※VARBINARY型で格納できるバイト数を指定しなかったもの。
TEXT 型は文字列データを扱うデータ型で格納できるデータのサイズを指定しないが、最大長は決まっている。
※VARCHAR型で格納できるバイト数を指定しなかったもの。
日付・時刻型
| 型 | 内容 | 
|---|---|
| DATE | 日時(年月日)。フォーマットは「YYYY-MM-DD」 | 
| DATETIME | 日時(年月日時分秒)。フォーマットは「YYYY-MM-DD HH:MM:SS」 | 
| TIMESTAMP | 日時(年月日時分秒)。DATETIME型とフォーマットは同じだが、扱えるデータ範囲が狭い | 
| TIME | 時刻(時分秒。フォーマットは「HH:MM:SS」で、「HH:MM」や「MM:SS」での指定が可能 | 
| YEAR | 年。フォーマットは「YYYY」で、下2桁での指定も可能 | 
整数型(真数値)
| 型 | バイト | 扱える値の範囲 | UNSIGNED | ZEROFILL | 
|---|---|---|---|---|
| TYNYINT | 1 | -128~127 | 0~255 | 000 ~255 | 
| SMALLINT | 2 | -32768~32767 | 0~65536 | 00000 ~65536 | 
| MEDIUMINT | 3 | -8388608~8388607 | 0~16777215 | 00000000 ~16777215 | 
| INTEGER(INT) | 4 | -2147483648~2147483647 | 0~4294967295 | 0000000000 ~4294967295 | 
| BIGINT | 8 | -9223372036854775808 ~9223372036854775807 | 0~18446744073709551615 | 00000000000000000000 ~18446744073709551615 | 
上記の違いは保存できる値の範囲(桁数)が違う。
また、ストレージを使用できるバイト数の違いでもある。
■ UNSIGNED
UNSIGNEDオプションを付けると符号を禁止することができ、
負の数を使用しないことで正の数は2倍の大きさまで使用することができる。
■ ZEROFILL
ZEROFILLオプションを付けると、入力した数字に対して最大桁数まで前方を自動的にゼロ埋めして登録される。
例えば「TYNYINT ZEROFILL」を指定した場合、「32」と入力すると「032」と登録される。
ZEROFILLを使用する場合、負の数は使用できない(UNSIGNEDを指定したのと同じ)状態になる。
固定小数点型 (真数値)
| 型 | 値の範囲 | 
|---|---|
| DECIMAL(m,n) | 整数部+小数部の合計桁数及び小数部に割り当てる桁数を事前に定める m:1~65桁(全体の桁数) n:0~30桁(少数部の桁数を指定する整数) | 
小数点以下を必要とする場合に使用する。
例えばDECIMAL(5,2)と指定した場合、小数点以下が2桁になるため整数部分は3桁となる。
具体的な値としては-999.99~999.99となる。
浮動小数点型 (概数値)
| 型 | バイト | 値の範囲 | 
|---|---|---|
| FLOAT | 4 | 3.402823466E+38~3.402823466E+38 | 
| FLOAT(m,n) | 4 | m:1~255桁(全体の桁数) n:0~30桁(少数部の桁数を指定する整数) まで指定可能 | 
| DOUBLE | 8 | -1.7976931348623157E+308~1.7976931348623157E+308 | 
| DOUBLE(m,n) | 8 | m:1~255桁(全体の桁数) n:0~30桁(少数部の桁数を指定する整数) まで指定可能 | 
小数点以下を必要とする場合に使用する。
上記の違いは使用するストレージのサイズと小数点以下の計算精度が違い、
「DOUBLE」は「FLOAT」の倍の精度で計算する。
※MySQLにおいては全ての計算が「倍精度」で行わているので、意図しなければ「DOUBLE」を使用する。
■UNSIGNED
整数型同様に負の数の入力を禁止することができるが、範囲は2倍にならない。
桁数を指定した場合は自動的にUNSIGNED同然となり、負の数を入力することができなくなる。
■ZEROFILL
こちらも整数型同様に、ゼロ埋めして入力することができる。
最後に
他にもBIT型やENUM型などありますが、だいぶ長くなってしまったのでここら辺で。
また理解が深まったりしたら更新していこうと思います!
参考サイト