アプリ版:「スタンプのみでお礼する」機能のリリースについて

MySQLのテーブル設計で迷っています。
クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか?

int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。

型 バイト 最小値 最大値
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807

CREATE TABLE `user` (
`no` int(8) unsigned NOT NULL auto_increment,
`id` varchar(24) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`reg_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`no`)
) TYPE=MyISAM;

A 回答 (3件)

> クリエイト文のカッコの中は桁数を表しているのでしょうか?


> それともバイト数でしょうか?

文字列型はバイト数ですが、数値型の場合は表示桁数です。
カッコの数値を変えても記憶領域は変えられません。
数値型のカッコは主にZEROFILLと組み合わせて使われるようです。

質問の18桁の数値が保持したいなら素直にBIGINTを使うか、
verchar等の文字型で代用する事になると思います。

例えば、こんなテーブルを作って…
CREATE TABLE `user` (
 `no` int(8) unsigned zerofill NOT NULL auto_increment
) TYPE=MyISAM;

INSERT user(no) VALUES(1);
でデータを作った場合

SELECT * FROM user;
+----------+
| no    |
+----------+
| 00000001 |
+----------+
1 rows in set (0.00 sec)

こんなんなります。また…

INT unsign の上限は 4294967295 ですので
INSERT user(no) VALUES(4294967296);
はエラーになります。

保持できるデータ型の範囲は参照URLをどぞ。

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/data-type …
    • good
    • 0

#1です。


> 例えば、こんなテーブルを作って…
試したらエラーでした。すいません。書き直します。

質問者様のテーブルを拝借して…
CREATE TABLE `user` (
`no` int(8) unsigned zerofill NOT NULL auto_increment,
`id` varchar(24) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`reg_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`no`)
) ENGINE=MyISAM;

これにデータを追加
INSERT user(id, email) VALUES('test-user', 'test@exsample.com');

読み出す。
mysql> SELECT * FROM user;
+----------+-----------+-------------------+---------------------+
| no | id | email | reg_date |
+----------+-----------+-------------------+---------------------+
| 00000001 | test-user | test@exsample.com | 0000-00-00 00:00:00 |
+----------+-----------+-------------------+---------------------+
1 row in set (0.00 sec)

↑ゼロを追加されて'no'の内容を8桁表示になっている。テキストがズレているのは気にしない方向で…
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考になりました。

お礼日時:2007/08/27 00:08

#1さんの回答で、



>文字列型はバイト数ですが、数値型の場合は表示桁数です。

とありますが、MySQL 4.1を境に仕様変更されています。

char(10)の場合、
~MySQL 4.0→10バイト
MySQL 4.1~→10文字

この回答への補足

ご回答ありがとうございます。
文字型は文字数なのですね。数値型の桁数は以下であっていますでしょうか?

TINYINT 3桁
SMALLINT 5桁
MEDIUMINT 8桁
INT 10桁
BIGINT 19桁

補足日時:2007/08/27 00:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!