当前位置: 首页 > news >正文

【MySQL数据库】数据类型

目录

1,数据类型分类

2,bit类型

3,小数类型

3-1,float/double类型

3-2,decimal类型

4,字符串类型

4-1,char

4-2,varchar

5,日期和时间类型

6,enum和set


1,数据类型分类

说明:

        在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。可以通过在类型后面加上UNSIGNED来说明某个字段是无符号的。

2,bit类型

        bit(M):位字段类型。M表示位数,范围从1到64。如果M被忽略,默认为1。

mysql> create table tt4 ( id int, a bit(8));

Query OK, 0 rows affected (0.01 sec)

mysql> insert into tt4 values(10, 10);

Query OK, 1 row affected (0.01 sec)

mysql> select * from tt4;   #发现很怪异的现象,a的数据10没有出现

+------ + ------ +
| id | a |
+------ + ------ +
| 10 |     |
+------ + ------ +
1 row in set(0.00 sec)

mysql > insert into tt4 values(65, 65); 
mysql > select* from tt4;
+------ + ------ +
| id | a |
+------ + ------ +
| 10 |     |
|   65 | A |
+------ + ------ +

        说明:bit字段在显示时,是按照ASCII码对应的值显示。其次,如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。

mysql > create table tt5(gender bit(1));
mysql > insert into tt5 values(0);
Query OK, 1 row affected(0.00 sec)


mysql > insert into tt5 values(1);
Query OK, 1 row affected(0.00 sec)


mysql > insert into tt5 values(2);   #当插入2时,已经越界了
ERROR 1406 (22001) : Data too long for column 'gender' at row 1

3,小数类型

3-1,float/double类型

        float(m, d) [unsigned]:m指定总长度,d指定小数位数,占用空间4个字节。

样例:

        float(4,2):表示的范围是-99.99 ~ 99.99。

        float(4,2) unsigned:范围是0 ~ 99.99,因为把它指定为无符号的数。

注意:

        若插入数值时的长度超过了定义的长度,MySQL在保存值时会根据存储长度的范围进行四舍五入,如定义类型float(4,2),插入 23.456 或 23.454 时,存储的是 23.46 或 23.45;插入 99.996 时,存储的是 99.99。

3-2,decimal类型

        decimal用法跟float一样,不同的是 decimal 表示的精度跟 float 不一样。

        float表示的精度大约是7位,decimal的精度更高。其中,它整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0;如果m被省略,默认是10。

4,字符串类型

4-1,char

        char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。

样例:

        char(2):表示可以存放两个字符,可以是字母或汉字,但是不能超过2个。

4-2,varchar

        varchar(L):可变长度字符串,L表示字符长度,最大长度65535个字节。varchar会根据存储字符的长度来开辟空间。

说明:

        若有一个 varchar(255) 类型的列,并且存储了一个长度为 10 的字符串,那么它只会占用 10 个字符加上长度信息的空间,而不是固定的 255 个字符的空间。

5,日期和时间类型

        常用的日期有如下三个:

        1,date:日期格式为 'yyyy-mm-dd',占用三字节。

        2,datetime:时间日期格式 'yyyy-mm-dd HH:ii:ss',表示范围从1000到9999,占用八字节

        3,timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用四字节。

6,enum和set

enum说明:

        enum是一个枚举,在mysql中表示 “单选” 类型,比如一个人的性别,姓名等。该设定只是提供了若干个选项的值,最终插入一个单元格中,实际只存储了其中的一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号,这一点跟高级语言中的枚举一样。

语法:

        enum('选项1','选项2','选项3',...);

set说明:

        set是一个集合,在mysql中表示 “多选” 类型,比如一个人喜欢的运动等。该设定只是提供了若干个选项的值,最终插入一个单元格中,可存储其中任意多个选项值。它与enum一样,这些选项值实际存储的是 “数字”,每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个,它也可以使用编号形式插入。

语法:

        set('选项值1','选项值2','选项值3', ...);

插入数据

        由于enum是单选,所以enum查询数据跟一般形式一样。set是集合形式,它的查询方式需要使用 find_ in_ set函数。

        find_in_set(sub,str_list):如果sub在str_list中,则返回下标;如果不在,返回0;str_list是一个用逗号分隔的字符串。使用方式如下图:

        下面来运用SQL指令查询相关信息。 

enum查询数据 

set查询数据

        最后说明下,不建议在添加枚举值或集合值的时候采用数字的方式,因为不利于阅读。

http://www.xdnf.cn/news/27307.html

相关文章:

  • Git 中修改某个特定的commit提交内容
  • Jsp技术入门指南【七】JSP动作讲解
  • 怎么查看LLM Transformer 架构进行并行计算和设备映射
  • 海量聊天数据处理:基于Spring Boot与SharingJDBC的分库分表策略及ClickHouse冷热数据分离
  • React 第三十三节 ReactRouter 中 useSearchParams 使用详解及注意事项
  • 【数据结构】二叉搜索树
  • SQL注入相关知识
  • 深度解析接口:构建代码规范与实现多态的基石
  • docker转移镜像
  • db中查询关于null的sql该怎么写
  • 测试模板1
  • Linux—I/O复用---select、poll、epoll
  • 学习笔记十八——Rust 封装
  • mysql8.0.17以下驱动导致mybatis blob映射String乱码问题分析与解决
  • 实现AWS Lambda函数安全地请求企业内部API返回数据
  • 嵌入式单片机开发 - 嵌入式系统中 Flash(闪存)与 RAM(随机存储器)
  • 《JVM考古现场(二十三):归零者·重启奇点的终极奥义》
  • 【Java面试系列】Spring Boot微服务架构下的分布式事务处理与性能优化 - 2025-04-19详解 - 3-5年Java开发必备知识
  • JVM 系列:JVM 内存结构深度解析
  • 基础数学知识-线性代数
  • 蓝桥杯之递归二
  • 洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)
  • 纯FPGA实现AD9361控制的思路和实现 UART实现AXI_MASTER
  • 实现Azure Synapse Analytics安全地请求企业内部API返回数据
  • @EnableAsync+@Async源码学习笔记之二
  • @EnableAsync+@Async源码学习笔记之三
  • 系统思考:危机中的转型机遇
  • STM32单片机入门学习——第43节: [12-3] 读写备份寄存器实时时钟
  • STM32 外部中断EXTI
  • 爬虫入门与requests库的使用——python爬虫