欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL支持的数据类型有哪些

程序员文章站 2022-12-10 17:29:40
数值类型 1、整数类型 所有的整数类型都有一个可选属性unsigned auto_increment:产生唯一标示或顺序值 在插入null到一个auto_increment列...

数值类型

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)