【SQL语言】数据类型 {数据类型分类;数值类型:整数类型、浮点类型、bit类型;字符串类型:char、varchar、enum、set;日期时间类型:date、datetime、timestamp}
【SQL语言】数据类型 {数据类型分类;数值类型:整数类型、浮点类型、bit类型;字符串类型:char、varchar、enum、set;日期时间类型:date、datetime、timestamp}
一、数据类型的分类
二、数值类型
2.1 整数类型
操作示例(以tinyint类型为例)
说明
- 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的,类型后跟unsigned表示无符号。
- 如果插入的数值越界,MySQL会直接拦截插入操作(不会像C/C++那样做截断处理),以此来保证成功插入的数据都是合法的、完整的。因此MySQL中的数据类型本身也是一种“约束”,这种约束迫使使用者插入合法的数据,保证数据库中的数据是可预期的、完整的。
2.2 bit类型
语法
bit[(M)] : 位字段类型。M表示所占的位数,范围从1到64。如果M被忽略,默认为1。
操作示例
说明
- M表示所占的位数,范围从1到64。如果M被忽略,默认为1。
- 如果试图创建大于64位的bit类型,系统将终止操作。
- 同整型一样,如果插入的数值越界,系统将拦截插入操作。
- 该版本的MySQL会以16进制的方式显示bit类型的数值,有些版本会以assic码的方式显示字符(对于有些数值则无法显示如0/1)。
2.3 浮点类型
2.3.1 float
语法
float[(m, d)] [unsigned] : m指定最大长度,d指定小数位数,占用空间4个字节
说明
-
float(m, d),整数部分最大m-d位
-
float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。
-
如果定义的是float(4,2) unsigned 这时,因为把它指定为无符号的数,范围是 0 ~ 99.99(直接舍去负数部分)。
-
如果只定义float,不做位数限制,默认保留最高6位3.1415926->3.14159。
-
float和double类型在表示小数时存在浮点精度误差,float类型能够精确到大约小数点后8位,double类型能够精确到大约小数点后18位。
-
double和float用法基本相同,比float精度更大,占用8字节空间。
操作示例
2.3.2 decimal
语法
decimal[(m, d)] [unsigned] : 定点数m指定长度,d表示小数点的位数
说明
-
decimal(5,2) 表示的范围是 -999.99 ~ 999.99
-
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
-
如果只定义decimal,不做位数限制,默认(10, 0);
-
decimal支持的整数最大位数m为65,小数最大位数d为30。
-
使用DECIMAL类型(十进制定点数)可以避免浮点运算中的误差,因为它不使用浮点表示(如IEEE 754),而是直接以二进制的形式存储小数。这种表示方法不会产生精度问题,因此可以精确地表示如货币等需要高精度的数值。
操作示例
三、字符串类型
3.1 char
语法
char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255
说明
- char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255
操作示例
3.2 varchar
语法
varchar(L): 可变长度字符串,L表示最大字符长度(单位字符),最大长度65535个字节
说明
char和varchar比较
-
存储方式:
-
CHAR:CHAR是固定长度的类型,预分配一个固定的空间来存储字符串。如果存储的字符串长度小于指定的长度,MySQL会用空格填充剩余的空间以达到指定的长度。在检索CHAR值时,末尾的空格会被删除。1
-
VARCHAR:VARCHAR是可变长度的类型,只占用实际需要的存储空间,外加一个字节或两个字节(取决于字符串长度)来存储字符串的长度信息。如果列的最大长度小于或等于255字节,则使用1个字节来表示长度;如果超过255字节,则使用2个字节。
-
-
性能差异:
-
CHAR:由于长度固定,数据库可以直接根据每个记录的存储长度进行快速定位,因此在某些情况下存储和读取效率较高,尤其是在频繁更新操作时可能会有更好的性能。2
-
VARCHAR:虽然存储和读取效率稍低,因为它需要处理长度信息,但它在存储空间上更为节省,适合存储长度可变的字符串。
-
-
使用场景:
-
CHAR:适合存储长度固定的字符串,例如国家代码、固定格式的编号等。由于固定长度,CHAR类型在频繁比较和排序的情况下表现更好。
-
VARCHAR:适合存储长度可变的字符串,例如名字、地址、描述等。由于其灵活性,VARCHAR在存储空间有限的情况下更为适用。
-
操作示例
3.3 enum & set
语法 + 说明
enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);
- 该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;
- 出于效率考虑,这些值实际存储的是“数字”,因此这些选项依次对应如下数字:1,2,3,…最多65535个;
- 当我们添加枚举值时,也可以添加对应的数字编号。
- 对1至255个成员的枚举需要1个字节存储;对于255至65535个成员,需要2个字节存储。最多允许有65535个成员。
set:集合,“多选”类型;
set('选项a','选项b','选项c', ...);
- 该设定只是提供了若干个选项的值,最终一个单元格中,可以存储其中任意多个值;
- 一个集合中的所有选项组成一个位图,其中的每个选项依次对应从低到高的每一位。如1表示’a’,2表示’b’,3表示’a’+‘b’,5表示’a’+‘c’,7表示’a’+‘b’+‘c’。
- SET类型最多可以设置64个值。存储大小由集合成员的数量决定,最多占用8个字节。对于1到8、9到16、17到24、25到32、33到64个成员的集合,其SET值分别占用1、2、3、4或8个字节4。
提示:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。
操作示例
尝试插入未设置的值
以编号和位图的形式插入
筛选出:1.所有男生 2.所有喜欢篮球的男生
提示:
- MySQL中的
where
相当于if,后跟筛选条件。可以用and
、or
、not
表示条件之间的逻辑关系。- 语句
select * from votes where hobby='篮球'
查询到的是爱好只有篮球的人。- 集合查询使用函数
find_in_set(sub,str_list)
:如果sub
在str_list
中,则返回下标;如果不在,返回0;str_list
是用逗号分隔的字符串或是在查表时表中的字段名。
四、日期时间类型
语法
常用的日期类型有如下三个:
date :日期 'yyyy-mm-dd',占用三字节
datetime 日期时间 'yyyy-mm-dd HH:ii:ss',占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节
说明
- date和datetime同其他类型数据一样需要使用者手动设置。
- 而timestamp类型的数据不需要手动设置,当该条记录创建或修改时,timestamp会自动更新。
操作示例

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)