今回は、MySQLの基本知識編として、
データ型について解説していきます。
データ型とは、少しプログラミングをやったことがある方ならすんなり受け入れられると思います。
例えば、整数⇒int、文字列⇒charといった感じです。
MySQLが初のプログラミング言語という方は珍しいと思いますが、
念のため初めてプログラミングを始めた方向けに丁寧に解説していきます。
Youtubeチャンネルにさまざまな動画を上げています。
↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓
本ブログはアフィリエイトを用いた広告を掲載しています。
データ型とは何か?
データ型とは、データベース上のお約束のようなものです。
0.01と見て人間は「あ、小数だな。」と認識できるわけですが、
パソコンやデータベースはそんなにお利口じゃないです。
ですから、あらかじめデータベースの格納する箱に、
ここに入っていいのは少数ですよ、文字列ですよ。と宣言しておく必要があるんです。
他のプログラミング言語でいうと、C言語や、javaなんかも
変数を宣言するときに、どんなデータ型ですよと指定する必要があります。
ちょっと特殊なのがpythonで、
pythonの場合は、変数を定義するときに、データ型を指定する必要がなく、
代入されたデータによってデータ型が自動で決まるというシステムを採用しています。
ただし、これは特殊な例なので、基本的にはこのお約束が必要と思ってもらって
間違いないです。
MySQLにおけるデータ型について。
MySQLのデータ型に関しては、このように、
公式リファレンスマニュアルを確認するのが一番手っ取り早いです。
とはいっても、すべてを解説しているとそもそも公式リファレンスマニュアルの
コピペになってしまいますから、よく使うデータ型を4つ選んで紹介します。
紹介するデータ型は以下の4つです。
それぞれについて解説していきます。
MySQLにおける、INT:整数型とは。
INT、整数型については、あまり解説もいらないかと思いますが、
整数を使いたいときにINTというデータ型を使用します。
記憶域として使用されるのは、4byte。
最小の値として入力できるのは、-2147483648。
最大の値として入力できるのは、2147483647となっています。
整数をデータテーブルに入れようとしてエラーとなる要因の一つとして、
この最小・最大値を超える値を入れようとしたときが挙げられます。
めったに超えるような数字ではないと思いますが、
もしもINTで扱える数字よりも大きい・または小さい数字を使いたい場合は、
INTの1つ上のBIGINTというものも存在します。
このBIGINTは、記憶域として使用されるのがINTの倍の8byte。
扱える最小値は-263 最大値は、263 となっています。
MySQLにおける、DOUBLE:浮動小数点数とは。
次に紹介するのが、DOUBLEです。
いわゆる小数をMySQLで扱いたいときのデータ型です。
DOUBLE型の扱える範囲は以下の表に、0を加えた範囲です。
最小値 | 最大値 |
---|---|
-1.7976931348623157E+308 | -2.2250738585072014E-308 |
2.2250738585072014E-308 | 1.7976931348623157E+308 |
0に限りなく近づくと言っても限界がありますから、
このようにプラス・マイナス側それぞれに0付近の制限があります、
また、公式リファレンスマニュアルにもある通り、ご使用の環境によっては、
実際の扱える範囲が小さくなる場合があることも注意が必要です。
MySQLにおける、VARCHAR:可変長文字列とは。
次に文字列について解説していきましょう。
文字列というと、例えば製品のシリアル番号や、Lot名などを扱う場合に
よく用いられます。
似たデータ型にCHARという、可変長ではない文字列を扱う
データ型が存在します。
とりあえずVARCHARを使っておけばいったんは大丈夫ですので、
VARCHARで文字列を扱うということで理解しておけばOKです。
VARCHARとCHARの違いについては、
今後記事にする予定ですので、そちらを参考にしてみて下さい。
MySQLにおける、DATETIME:日時とは。
データを格納した日付や、測定データの測定日時など、
トレーサビリティの関係でデータベースに保存することがほとんどだと思います。
そんな時、先ほど紹介した文字列のVARCHARで格納しても良いのですが、
日時に関しては、専用のDATETIME型と呼ばれるデータ型が用意されています。
具体的には、’0000-00-00 00:00:00’このように、
YYYY-MM-DD HH:mm:ssの順で格納することができます。
このように統一された日時データとなることで、
他のデータテーブルでも同じフォーマットで処理できるのが最大の特徴です。
どんな時にMySQLのデータ型の知識が必要になるか?
さて、ここまで解説を読んでくれたあなたの場合、
あまりこの説明は不要な気もしますが、念のため解説しておきます。
一番大きな影響があるタイミングとすると、
データテーブルの設計のタイミングです。
データテーブルを設計するときは、
そのテーブルにどんなデータを格納するかあらかじめ入念に考えておく必要があります。
そのとき、整数が入ってくる予定なのか?小数が入ってくる予定なのか?
文字列を格納する予定なのか?様々考えられるわけです。
そのデータテーブルの設計時に、このデータ型を理解していないと、
どの列にどんなデータ型を入れていいかさっぱりわからない。ということになります。
ほかにも、データテーブルが出来上がったあとでも、
データ型の知識は必要になります。
その代表格が、データの挿入です。
データをデータテーブルに入れるとき、出来上がったデータテーブルに対して、
どんなデータ型になっているかきちんと考える必要があります。
のちほど具体例で解説していきますが、
文字列のデータ型の列に整数を入れたり、整数のデータ型の列に小数を入れたりして
トラブルが発生することはよくあります。
そんなとき、データ型の知識が有れば、すぐに対応可能なわけです。
ちなみに、そんなデータ型ですが、
既存のデータテーブルのデータ型を確認する簡単な方法は、Show文で、
カラムを指定することです。
その具体的なやり方については、以前の記事で詳しく解説していますから、
いちどご覧になっておいたほうが良いかと思います。
実際にデータ型を指定してMySQLに挿入してみる。
ここまで長々と解説してきましたが、
百聞は一見に如かずということで、実際にデータベースを使って
データ型についてさらに理解を深めましょう。
あらかじめ、testというテーブルを用意しておきました。
カラムの属性は以下の通りです。
整数が入る | 小数が入る | 可変長文字列が入る | 日時が入る |
---|---|---|---|
int_test | double_test | varchar_test | datetime_test |
int型 | double型 | varchar型 | datetime型 |
実際に動作させたcreate文ががこんな感じです。

create table test (int_test int,double_test double,varchar_test varchar(6),datetime_test datetime);
注意点としては、varcharに関しては最大文字数を指定してあげる必要があるので、
かならず()で最大文字数を入力してあげましょう。
そして、出来上がったtestというテーブルのカラムを確認してみましょう。

こんな感じでTypeのところがデータ型になっています。
それでは実際にinsert文でデータを挿入していきましょう。
正しいデータ型でinsertしてみる。
まずは正しいデータ型でinsertする場合です。
これは普通にinsertするだけですね。こんな感じのinsert文にしてみました。
insert into test values (100,0.2,'hobbyhappy','2023-08-14 19:08:00');
結果としては、普通に格納されます。
格納されたtableの中身を見てみると、このように正しく格納されています。

特になんてことはないのですが、やりがちなミスも含めて、
次の章で間違ったデータ型でinsertしてみたいと思います。
間違ったデータ型でinsertしてみる。
最後に間違ったデータ型でinsertしてみます。
もう一度今作ってあるデータテーブルのデータ型について再度載せておきますね。
整数が入る | 小数が入る | 可変長文字列が入る | 日時が入る |
---|---|---|---|
int_test | double_test | varchar_test | datetime_test |
int型 | double型 | varchar型 | datetime型 |
それでは間違ったデータ型でinsertしてみます。insert文はこのようにしました。
insert into test values (100.5,4,hobbyhappy,2023-08-14 19:08:00);
はい、結果はエラーのオンパレードです。

4項目ともすべてデータ型を無視した値を入れているからですね。
それでは、データ型を一部正しくしてinsertしてみましょう。
insert into test values (100.5,4,'hobbyhappy','2023-08-14 19:08:00');
intのカラムなのに、小数が入っていたり、
小数のカラムなのに整数が入ったりしていますね?
ですがこれはちゃんとコマンドとして通ります。
実際どんなふうに格納されたかというと…

2段目が先ほど打ち込んだコマンドで格納されたデータです。
よく見てもらうと、int_testには100.5を入れたはずが、100が入っていますね。
これは、小数が入ってきたら自動で四捨五入してくれているんです。
その証拠に、このコマンドを打ってみましょう。
insert into test values (100.3,4,'hobbyhappy','2023-08-14 19:08:00');
今度は100.3です。その結果はこちら。

101ではなく、100となっていますね。切り捨てでも切り上げでもないということがわかります。
doubleに整数を入れているところの説明は放置していましたが、
整数も小数で表現できることから、特に問題なく格納されるという話になります。
全体を通しての注意点ですが、
varcharやdatetimeなどの文字列を含むデータ型に関しては、
insertする際に必ず(‘)シングルコーテーションで囲む必要があります。
結構これ抜かしちゃってエラーになることあります。
ですから注意深く確認するようにしましょう。
今回のまとめ。
今回はMySQLのデータ型について解説しました。
実際のところ、int型がいいのか?tinyintでも間に合うか?とか、
doubleではなくてdecimal(固定小数点数)のほうがいいのではないか?
とかいろいろ実務上はあると思います。
ただ、少なくても今回紹介した4つのデータ型を理解しておけば、
少し調べるだけですぐに使えるようになります。
ですから、逆にこの4パターンしか使わないのではなく、
シチュエーションによってご自分で使いこなしていただくといいと思います。