MySQL支持的数据类型有哪些
数值类型
1、整数类型
所有的整数类型都有一个可选属性unsigned auto_increment:产生唯一标示或顺序值
在插入null到一个auto_increment列时,MySQL插入一个比该列中最大值大1的值。 一个表最多只能有一个auto_increment列。 任何一个auto_increment列应该定义为not null,并且定义为primary key或者定义为unique键。
2、小数类型
浮点数:float和double
定点数:decimal
定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
“(M,D)”表示该值一共显示M位数字,其中D位位于小数点后面,M和D又称为精度和标度。
MySQL保存值时进行四舍五入。
mysql> desc t1; +-------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------+------+-----+---------+-------+ | id1 | float | YES | | NULL | | | id2 | double | YES | | NULL | | | id3 | decimal(10,0) | YES | | NULL | | +-------+---------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
mysql> insert into t1 values(1.234,1.234,1.234); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> show warnings; +-------+------+------------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------------+ | Note | 1265 | Data truncated for column 'id3' at row 1 | +-------+------+------------------------------------------+ 1 row in set (0.00 sec)
mysql> select * from t1; +-------+-------+------+ | id1 | id2 | id3 | +-------+-------+------+ | 1.234 | 1.234 | 1 | +-------+-------+------+ 2 rows in set (0.00 sec)
浮点数如果不写精度和标度,则会按照实际精度值显示,如果有精度和标度,则会自动将四舍五入后的结果插入,系统不会报错;
定点数如果不写精度和标度,则会按照默认值decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错。
3、位类型
存放位字段值,bit(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
对于位字段,直接使用select命令看不到结果,可以用bin()(显示二进制格式)或者hex()(显示为十六进制格式)函数进行读取。
mysql> create table t2(id bit); Query OK, 0 rows affected (0.03 sec) mysql> desc t2; +-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | id | bit(1) | YES | | NULL | | +-------+--------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> insert into t2 values(1); Query OK, 1 row affected (0.01 sec)
mysql> select * from t2; +------+ | id | +------+ | | +------+ 1 row in set (0.01 sec)
可以发现,直接使用select *的结果为null。
mysql> select bin(id),hex(id) from t2; +---------+---------+ | bin(id) | hex(id) | +---------+---------+ | 1 | 1 | +---------+---------+ 1 row in set (0.01 sec)
注意:数据插入bit类型字段时,首先转换为二进制,如果位数允许,将成功插入;如果位数小于实际定义的位数,则插入失败。
mysql> select bin(id),hex(id) from t2; +---------+---------+ | bin(id) | hex(id) | +---------+---------+ | 1 | 1 | +---------+---------+ 1 row in set (0.01 sec) mysql> insert into t2 values(2); ERROR 1406 (22001): Data too long for column 'id' at row 1
将id定义修改为bit(2)后,重新插入,插入成功:
mysql> alter table t2 modify id bit(2); Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql> desc t2; +-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | id | bit(2) | YES | | NULL | | +-------+--------+------+-----+---------+-------+ 1 row in set (0.00 sec) mysql> insert into t2 values(2); Query OK, 1 row affected (0.03 sec) mysql> select bin(id),hex(id) from t2; +---------+---------+ | bin(id) | hex(id) | +---------+---------+ | 1 | 1 | | 10 | 2 | +---------+---------+ 2 rows in set (0.00 sec)
上一篇: linux上免安装版mysql的部署步骤
下一篇: 通过网络NTP协议进行时间同步