ToB企服应用市场:ToB评测及商务社交产业平台

标题: MySQL——数据类型 [打印本页]

作者: 徐锦洪    时间: 2024-9-25 17:04
标题: MySQL——数据类型
一、常见的数据类型及分类


其中上述的数值类型包罗了整形和浮点型,文本、二进制类型主要是字符串类型。






二、数值类型

2.1 整型

整型包罗以下几种:

它们最根本的区别就是所占用的空间巨细差别,也因此导致了可以大概存储的数据范围差别。
2.1.1 tinyint

先来测试一下tinyint的取值范围。

我们实验插入一些数据。

在插入合法的范围内是可以大概正常举行插入的,但是一旦超过tinyint的取值范围,就会不让插入了,而且当插入的数据不是整型时,也是不让插入。
在C/C++中,int tmp = 'a'最多会发出提醒,并不会报错,本质上发生了隐式类型转换。char a = 200也不会报错,会发生截断。纵然你存储的数据超出了指定类型的取值范围,也并不会报错,而是发出警告而且存储溢出后举行调整的值。
在数据库中并不想C/C++那样,而是有着严格的要求。mysql的数据类型中,符合条件才会让你操作,不符合条件直接不让操作。在mysql的数据类型中,除了可以大概满足各种应用场景,还有一个特别重要的用途:数据类型本质就是一种束缚!束缚就是强制必须按照规则去做,束缚的就是利用者,倒逼利用者,必须遵守规则!
我们再来简单测试一下无符号的tinyint。

我们实验向tmp1列中插入一些数据,如下图:

我们在查察表t1的数据时,发现有NULL。那么NULL和空字符串' '是一样的吗?答案是不一样的。NULL和空字符串' '代表这差别的含义:
在mysql中,字符串可用单引号' '来引用,也可以利用双引号" "来引用。一般情况下在mysql中都是用单引号' '的。
2.1.2 bit

bit类型也是一种数据类型。bit类型是用于存储二进制数字的数据类型。它可以用来表示位值为0或1的数值,比如开关状态、标志位等。

如上图,我们创建了一个t2表。其中包罗了列a,数据类型为int;列b,数据类型为bit(10)。括号内的10的意思就是我们指定有几个比特位。那么b的巨细是10个比特位。我们再来测试一下,如下图:

确实能欧插入成功。10个bit可以大概存储的数据范围是0~1023。确实正如上图所示。我们再来查察一下表中的数据。如下图:

怎么表中存储的并不是我们所插入的数据呢?存储是按照我们所插入的数据举行存储的,但是bit类型在显示时,是按照ASCII码对应的值举行显示的。详细如下图:

需要注意的是,虽然bit类型可以用于存储任意巨细的二进制数,但是在实际应用中,bit通常只是用于存储较小的数值。这是因为bit类型的空间服从相对较低,对于较大的数值,利用其他数据类型可能会更加合适。
2.2 浮点型

2.2.1 float

float用于存储近似值的浮点数,它表示单精度浮点数。由于浮点数是以二进制情势表示的,可能存在精度丢失的情况。下面我们通过详细实例来明白用法。

上图中我们创建了一个名字为t3的表。其中包罗了一个字段a,其类型为float(4,2)。float的语法格式为float(M,D),其中M表示总位数,D表示小数点后的位数。比方,float(4,2)表示总共4位,其中2位为小数位。下面我们插入一些数据来看一下,如下图:

那假如是插入长度大于4的数据呢?我们再来看下图:

正如上图所示,当小数位数大于两位时,会举行四舍五入。四舍五入就会产生进位,但必须保证进位后的小数也可以大概满足两位,也就是整数部门不得超过两位。这里可以看到float(4,2)的取值范围是-99.994 ~ 99.994。
下面再来看一下无符号的float,如下图:

插入数据:

但是负数就不能再举行插入了,如下图:

其实在这里就可以发现,float(M,D)中的M和D限制了我们的数据范围,其次就是有符号和无符号的区别。float可以表示最大值为3.402823e+38的正或负实数,所占用的字节为4字节。
在MySQL中,假如不指定float类型的总位数和小数点后的位数,默认情况下float类型的总位数是其最大取值范围。

这里可以看到,float一旦数据较大,就会有精度损失。一般情况下提供6位精度。
这意味着float类型可以存储大约6位有效数字的数据,但实际精度可能受到存储数据时的舍入误差的影响。
2.2.2 decimal

decimal用于精确存储数字,它表示定点数,可以大概保证精度不会丢失。
decimal的语法格式为DECIMAL(M,D),其中M表示总位数,D表示小数点后的位数,比方,DECIMAL(10,2)表示总共10位,其中2位为小数位。

这里可以看到,decimal类型精度并没有丢失。decimal与float都是用来存储浮点数的,用法也是相同的,差别的是,decimal类型存储的数字是精确的,不会丢失精度。decimal占用的空间为8字节。
三、字符串类型

3.1 char

char类型在mysql中是一个常常利用的类型。

这里界说了一个名字为str的字段,其属性为char(5),也就是最多可存储5个字符。插入数据来看一下:

这里可以看到,一旦插入的字符长度超过5,就不会让你插入了。【注意】在mysql中,char(5)中的5指的是5个字符,并不是5个字节。所以在这里最多也可以插入5个汉字。

在差别编码中,一个字符所占的字节个数是差别的。比如utf8中一个字符占3个字节,而gbk中一个字符占2个字节。char(5)就是指可以大概最多插入5个字符。如许用户在利用时就不消关心字节数的问题了。
char也是有字符长度上限的,char的字符长度上限是255

3.2 varchar

varchar也是用来存储字符的数据类型。利用方法和char相同。

那么 varchar 和 char 有什么区别呢就char(10) 和 varchar(10) 来说明,无论char中实际存储的字符串长度是多少,char始终占用10个字符长度的存储空间。但是varchar是一种可变长度的字符类型,意味着它只占用实际存储数据所需的存储空间。我们在varchar中只存储5个字符的话,那么varchar只占用5个字符长度的空间。
   关于varchar(len),len到底是多大,这个len值,和表的编码密切相干:
  
  3.3 char和varchar的比力



   【主要区别】
    选择利用哪种类型取决于详细需求。假如知道要存储的字符串的长度,而且长度是固定的,CHAR可能是一个好选择。然而,假如不确定字符串的长度,或者需要更大的机动性,利用VARCHAR可能更合适。
四、日期与时间类型

在前面的文章利用过到data类型。该类型就是属于日期类型的。常见的日期类型有:


通过上图可以看出,timestamp时间戳是不允许为空的,而且他是有默认值的。默认值就是当前的时间戳。插入数据看一下:

看到并没有插入时间戳时会自动插入和更新的。这里的更新是指的每当对表举行修改操作时,时间戳就会更新
在利用这些数据类型时,需要根据实际需求选择合适的类型。假如只需要存储日期,选择DATE类型;假如需要存储日期和时间,选择DATETIME或TIMESTAMP类型,根据需要思量是否需要自动更新功能。TIMESTAMP常用于的就是批评时记录时间或者发表内容时的时间。
五、枚举与集合类型

5.1 enum

enum类型是一种字符串对象的类型,用于界说一个列可以包罗的可能值的有限列表。语法:enum('value1', 'value2', ...)。其中,'value1', 'value2'等是列允许的枚举值。我们直接看一个实际的例子。如下图:

当我们再插入数据时,插入hobby属性时,就可以从我们的枚举列表中举行选择其中一个举行插入。如下图:

如上图所示,插入的数据并不是枚举中的属性值,就会报错。出于服从思量,这些值实际存储的是 “ 数字 ” ,因此这些选项的每个选项值依次对应如下数字: 1,2,3,.... 最多 65535 个;当我们添加枚举值时,也可以添加对应的数字编号( 枚举中仍然何以利用下标举行选择所要插入的数据)。如下图:

 但是需要注意的一点是:枚举中的第一个元素下标是从1开始的,并不是从0开始的
5.2 set

通过对上述的枚举的明白后,我们发现在很多情况下一个人的爱好会有很多,并不是只有一个。但是枚举类型只能一次选一个。这时候我们就可以利用set类型。
SET是一种字符串对象,用于界说一个列可以包罗的可能值的多选列表。语法:SET('value1', 'value2', ...)。其中,'value1', 'value2'等是列允许的多选值。我们可以直接通过之前学的对表举行修改,把hobby的类型改成set。详细如下图

插入一些数据,详细如下图:

通过上图可以看到,再插入数据时我们可以从set集合中一次选多个数据举行插入,也可一次只选一个数据。set集合设定只是提供了多少个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于服从思量,这些值实际存储的也是“数字”,因此这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。我们再来通过数字举行插入,详细如下图:

【注意】3是1和2相加的结果,7是1和2和4相加的结果。我们可对应set集合举行查察。
虽然可以用数字添加枚举,但是不发起在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读,且后期维护本钱较高。
5.3 查找

find_in_set()是 MySQL 中的一个函数,用于在逗号分隔的字符串列表中查找指定的字符串。它的作用是在一个逗号分隔的字符串列表中查找指定的值,并返回该值在列表中的位置。利用方法:
  1. FIND_IN_SET(search_string, string_list)
复制代码
其中:

返回值:


我们就利用find_in_set()举行查找喜好篮球的,结果如下图:

固然,也可以在后面跟任何你想筛选的条件。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4