MySQLの型
できればDBの型(SQLの型)という名前で互換性のあるものをまとめたいが、MySQLしか知らんのでいったんここに書く
その型がMySQL特有のものなのか、一般的なものなのかは常に意識したほうが良いmrsekut.icon
できるだけ、一般的なものを使ったほうが良い(?)
これは諸説ありそうだがmrsekut.icon
ほぼ起きないDBの変更のために、型を緩めるべきか微妙だと思うし
大きく分けると以下の3つ
文字
MySQLの数値型
時刻
文字列
CHAR(n)
nは文字列の長さ
もし文字列がnよりも短かった場合、文字列の右側の末尾にスペースで補完される
0文字以上255文字以下
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0041
VARCHAR(n)
CHAR型と違って、nよりも短かった場合、データに合わせた文字列として可変長で保存される
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0041
BINARY
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0044
VARBINARY
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0044
BLOB
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0044
TEXT
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0044
ENUM型 (DB)
SET
https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0044
JSON型 (DB)
/mrsekut-book-4798128023/268 (第12章 文字列型)
時刻系
DATE
日付値のみ
時刻部分が不要な場合に使用する
format
'YYYY-MM-DD'
範囲
'1000-01-01' 〜 '9999-12-31'
https://www.dbonline.jp/mysql/type/index4.html
日付を入れる場合はDATE型を使う
商品のお届け日など、日付を入れる場合は DatetimeやTimestamp型ではなくDATE型を使うようにします。DatetimeやTimestampはタイムゾーンの影響を受けるためです。 ref
DATETIME
日付と時刻の両方を必要とするときに使用する
format
'YYYY-MM-DD HH:MM:SS'
範囲
'1000-01-01 00:00:00' 〜 '9999-12-31 23:59:59'
https://www.dbonline.jp/mysql/type/index4.html
TIMESTAMP
insertまたはupdate操作に対して、現在の日付と時刻を自動的に指定することができる。TIMESTAMP型のカラムが複数ある場合は、最初のカラムのみが自動で更新される。
形式は表示サイズによって異なる・・・だったんだけど4.1系以降では'YYYY-MM-DD HH:MM:SS'の形式となり、タイムスタンプ長のサポートは中止されている
https://www.dbonline.jp/mysql/type/index4.html
TIME
https://www.dbonline.jp/mysql/type/index4.html
YEAR
https://www.dbonline.jp/mysql/type/index4.html
/mrsekut-book-4798128023/250 (第11章 時間型)
#??
サイズを無駄に大きく取ることのデメリットは?
dbに限った話ではないが
それを知らないと、もしもめっちゃ増えたときのために、intじゃなくて、bigint使っとこ〜になる