数据库--数据类型

   数据库和我们平时编程是相同的也有不同的数据类型,这次我们对数据库中的数据类型进行一下介绍。

这里我们创建了数据项num的类型是tinyint,这里的int类型只能存储-128到127范围内的数据,也就是和C程序中的char类型存储范围是一样的,这里当我们插入1 的时候自然没有问题,但是当我们插入128的时候会有警告,这里不同的数据库会因为配置不同有不同的反应。

如果是这样显示的说明, 你的数据库并没有开启显示警告的功能。

这时候就可以通过warnings来开启显示警告的功能。

这里我们插入数据只是给了一个警告,我们可以通过select来查看一下数据库中的数据

第二个数据并不是我们想存储的128而是存了最大数127,导致数据出现了问题。这里我们插入错误数据只是给了警告,但是通常来说我们是不能让他插入进去的,这就需要我们开启数据库中的严格模式。

开启严格模式之后再对数据进行插入就不是警告了而是错误。这时候数据就不能插入到我们的数据库中。

Tinyint有无符号是两种,上边我们演示的是有符号,默认的是有符号,这里我们创建tt2中的tinyint是无符号的,无符号的范围是0-255,所以我们插入-1就会出现错误。

在数据库中对于浮点数的定义和普通的程序有一些不同。

float[(m, d)]: M指定显示长度,d指定小数位数,占用空间4个字节。我们上边定义的范围就是-99.99到99.99

所以查询数据的时候第二条插入的数据只能存储到小数点后两位。Float默认是有符号的,当然也存在无符号的,无符号如果是上边的定义的话范围0-99.99会把负数那部分舍弃掉。

Decimal 和float是一样的定义方式,看起来是一样的,不过他俩有一个最大的区别就是decimal的精度更加的精确。

Float的最大精度一般为7位

Char类型需要和括号进行搭配,这里我们定义的大小为2,插入ab可以但是插入中国两个字的时候提示超过范围了,但是有时候中国是可以存储的,是因为汉字的编码不同的编码制度大小是不一样的。

当我们指明表的创建格式为utf8的时候就可以正常的插入中国两个汉字

Varchar是可变长的字符串,6代表可以存储的最大长度。

那char和varchar我们到底是如何选择呢?什么时候选择定长的什么时候选择变长的。

如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5

如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。

定长的磁盘空间比较浪费,但是效率高。

变长的磁盘空间比较节省,但是效率低。

对于日期的存储mysql也有很多种,这里我们创建了三种不同的日期类型,data,datatime,timestamp

可以看出来data是精确到年月日,对于datatime 则是精确到了时分秒,timestamp和datatime一样不过timestamp时间戳我们在插入的时候是不需要进行操作的,系统会自动帮我们插入

当我们对数据进行更新的时候时间戳也会随着进行更新。

下边我们介绍两种不同的集合类型一个是set一个是enum。之后插入数据。

对于set类型我们可以选择其中的一项或者多项但是对于enum我们只能选择其中枚举的一项。

假如说我们数据中存在格式为

+-----------+---------------+--------+

| username  | hobby         | gender |

+-----------+---------------+--------+

| 雷锋 | 登山,武术      | 男     |

| Juse      | 登山,武术 | 女     |

| LiLei     | 登山 | 男     |

| LiLei     | 篮球 | 男     |

| HanMeiMei | 游泳 | 女     |

+-----------+---------------+--------+

的数据的时候,如果我们查询所有有登山爱好的人。

mysql> select * from votes where hobby='登山';

+----------+--------+--------+

| username | hobby  | gender |

+----------+--------+--------+

| LiLei    | 登山   | 男     |

+----------+--------+--------+

```

只能显示出爱好只有登山的人,那如果我们想要查询所有爱好有登山的人就需要用到集合查询函数。

mysql> select * from votes where find_in_set('登山', hobby);

+----------+---------------+--------+

| username | hobby         | gender |

+----------+---------------+--------+

| 雷锋     | 登山,武术     | 男     |

| Juse     | 登山,武术     | 女     |

| LiLei    | 登山          | 男     |

+----------+---------------+--------+

查出hobby中包含登山的数据,用find_in_set函数。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页