499360 ランダム
 HOME | DIARY | PROFILE 【ログイン】

まんじうこわい@楽

PR

Rakuten Ranking

Keyword Search

▼キーワード検索

Calendar

Rakuten Profile

設定されていません

Free Space

Category

Freepage List

2009.03.24
XML
カテゴリ:データベース
 DBを眺めていると「tinyint(4)」という定義を見つけた。
 これは・・・0~4までという意味で定義したのか、それとも0000~9999という意味で定義したのか、それとも0000~1111という意味で・・・
 でもtinyintは-128~127しか入らないはず。
 そもそも隣の数値の意味は~・・・
 
 気になったので実験。(ついでにintも試してみました。)

--テスト用テーブル作成--
mysql> create table `test_tbl` (`ti` tinyint(4),`ni` int(11));
Query OK, 0 rows affected (0.02 sec)

mysql> desc test_tbl;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| ti    | tinyint(4) | YES  |     | NULL    |       |
| ni    | int(11)    | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

--tinyintに4桁の数値、intに11桁の数値を入れてみる--
mysql> insert into test_tbl values(1234,12345678901);
Query OK, 1 row affected, 2 warnings (0.01 sec)

ぉ?warnings吐いてる。

--テーブルの中身を見てみる--
mysql> select * from test_tbl;
+------+------------+
| ti   | ni         |
+------+------------+
|  127 | 2147483647 |
+------+------------+
1 row in set (0.01 sec)

 各型の最大値に丸められてます。
 tinyint:1234=>127
 int:12345678901=>2147483647

 この型の隣にある数値の意味について誤解されている事が多いし、自分もよく混乱する上にちゃんと分かってない。
 原因はcharやvarcharでの桁数指定がこれと同じ記述である事や、tinyint(1)を指定するとbit扱いし、0と1しか入れられなくできる設定が大きい。

 マニュアルには以下のような記述がある。
--引用--
このオプションの表示幅の指定は、カラムに指定された幅より小さい幅を持つ値で表示の左側を埋める目的で使用されますが、そのカラムに格納できる値の範囲が制限されたり、そのカラムに指定された幅を超える幅を持つ値の桁数が制限されたりすることはありません。
--------
 読んでも正直パッとしません。ただ、この数値指定によって桁数制限されるわけではない、ということは分かります。

 では、こちらはどうでしょう
--引用--
この表示幅オプションは、カラムに指定された幅よりも小さい幅の整数値を表示する際に左側をスペースで埋めるために使用されます。
この表示幅は、カラムに格納する事ができる値の範囲も、カラムに指定された幅を超える値の表示される桁数も制限しません。
例えば、SMALLINT(3) として指定されたカラムは、通常の -32768 から 32767 の SMALLINT 範囲を持ち、そして、3文字で許容された範囲外の値は3文字以上の文字を使って表示されます。
--------
 何やら急に分かりやすい表現になっています。
 引用前者はMySQL4.1のもので、後者はMySQL5.1のものです。初めから5.1の説明を読んでいればすぐ分かりますね。

 という事は、
tinyint(4)は4桁よりも小さい数値は足りない桁にスペースが入って表示される。
扱う桁の制御を行うものではない。
 が正しい解釈?

 きっと私のように混乱していた人も多いかと。
 ちょっと自信無いですが、あっているはずっ!
 間違ってたらツッコミお願いしますorz






Last updated  2009.03.24 22:05:55
コメント(3) | コメントを書く
[データベース] カテゴリの最新記事

Copyright (c) 1997-2017 Rakuten, Inc. All Rights Reserved.