mysql有几种数据类型可以限制类型的长度,有char(length)、varchar(length)、tinyint(length)、smallint(length)、mediumint(length)、int(length)、bigint(length)、float(length, decimals)、double(length, decimals)和decimal(length, decimals)。
然而,这些数据类型的长度,并不是都指数据的大小。具体说就是:
(1)char、varcahr的长度是指字符的长度,例如char[3]则只能放字符串123,如果插入数据1234,则从高位截取,变为123。 varcahr同理。
(2)tinyint、smallint、mediumint、int和bigint的长度,其实和数据的大小无关!length指的是显示宽度,举个例子:
[cpp] view plaincopymysql> create table test(id int(3) zerofill); query ok, 0 rows affected (0.09 sec) mysql> insert into test(id) values(1),(1234); query ok, 2 rows affected (0.06 sec) records: 2 duplicates: 0 warnings: 0 mysql> select * from test; +------+ | id | +------+ | 001 | | 1234 | +------+ 2 rows in set (0.00 sec) 可以看出,id的显示宽度为3,不足的左边补0,数据长度超过的则原样输出。如果没有zerofill,则看不出显示宽度,没有前导零。
(3)float、double和decimal的长度指的是全部数位(包括小数点后面的),例如decimal(4,1)指的是全部位数为4,小数点后1位,如果插入1234,则查询的数据是999.9。过程如下
[cpp] view plaincopymysql> alter table test add realnum decimal(4,1); query ok, 2 rows affected (0.03 sec) records: 2 duplicates: 0 warnings: 0 mysql> insert into test(id,realnum) values(2,1234); query ok, 1 row affected, 1 warning (0.05 sec) mysql> select * from test; +------+---------+ | id | realnum | +------+---------+ | 001 | null | | 1234 | null | | 002 | 999.9 | +------+---------+ 3 rows in set (0.02 sec) 附录 常见mysql数据类型(留作备忘)
类 型
大 小
描 述
cahr(length)
length字节
定长字段,长度为0~255个字符
varchar(length)
string长度+1字节或string长度+2字节
变长字段,长度为0~65 535个字符
tinytext
string长度+1字节
字符串,最大长度为255个字符
text
string长度+2字节
字符串,最大长度为65 535个字符
mediumint
string长度+3字节
字符串,最大长度为16 777 215个字符
longtext
string长度+4字节
字符串,最大长度为4 294 967 295个字符
tinyint(length)
1字节
范围:-128~127,或者0~255(无符号)
smallint(length)
2字节
范围:-32 768~32 767,或者0~65 535(无符号)
mediumint(length)
3字节
范围:-8 388 608~8 388 607,或者0~16 777 215(无符号)
int(length)
4字节
范围:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(无符号)
bigint(length)
8字节
范围:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(无符号)
float(length, decimals)
4字节
具有浮动小数点的较小的数
double(length, decimals)
8字节
具有浮动小数点的较大的数
decimal(length, decimals)
length+1字节或length+2字节
存储为字符串的double,允许固定的小数点
date
3字节
采用yyyy-mm-dd格式
datetime
8字节
采用yyyy-mm-dd hh:mm:ss格式
timestamp
4字节
采用yyyymmddhhmmss格式;可接受的范围终止于2037年
time
3字节
采用hh:mm:ss格式
enum
1或2字节
enumeration(枚举)的简写,这意味着每一列都可以具有多个可能的值之一
set
1、2、3、4或8字节
与enum一样,只不过每一列都可以具有多个可能的值