当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL支持的数据类型有哪些

MySQL支持的数据类型有哪些

2018年03月15日  | 移动技术网IT编程  | 我要评论

数值类型

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)

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网