MySQL---数据类型

各个数据类型

数值类型分类

1、tinyint类型

查表结构

查看数据库内部的表名称

查看t1表创建时的语法细节

插入几个数据

如果我们向mysql特定的类型中插入不合法的数据,MySQL一般是直接拦截我们,不让我们做对应的操作。

反之,如果我们已经有数据被成功插入到mysql中了,一定插入的时候是合法的。

所以,mysql中,一般而言,数据类型本身也是一种:约束(倒逼程序员让程序员,让程序员尽可能进行正确的插入,约束:约束使用者,另外,如果你不是一个很好的使用者,mysql也能保证数据插入的合法性)。

设置足够多的约束,就能保证数据库中的数据是可预期的,完整的。

mysql表中建立属性列:列名称 类型在后。

num tinyint unsigned

2、bit类型

只有一个bit,所以不能插入了。

查看插入的数据

修改online


bit字段在显示时,是按照ASCII码对应的值显示。

mysql> insert into tt4 values(65, 65);
mysql> select * from tt4;
+------+------+
| id | a |
+------+------+
| 10 | |
| 65 | A |
+------+------+
如果我们有这样的值,只存放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

bit(M) : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
超出范围就会报错

3、小数类型

(1)float

float(m, d) unsigned : M指定显示长度,d指定小数位数,占用空间4个字节
例如:float(4,2)表示:
数字整体最多占4位,包括整数和小数。2表示:小数点后面
固定保留两位小数。
浮点数范围是:-99.99~99.99

查看表,字段、类型,约束

插入数据

无符号的:


检验其范围:

由下图可以知道,无符号的float,加 UNSIGNED 后:
直接去掉负数了

(2)decimal

用法: decimal(m, d) unsigned : 定点数m指定长度,d表示小数点的位数

decimal(5,2) 表示的范围是 -999.99 ~ 999.99
decimal(5,2) unsigned 表示的范围 0 ~ 999.99
decimal和float很像,但是有区别:
float和decimal表示的精度不一样
例如:
mysql> create table tt8 ( id int, salary float(10,8), salary2
decimal(10,8));
mysql> insert into tt8 values(100,23.12345612, 23.12345612);
Query OK, 1 row affected (0.00 sec)
mysql> select * from tt8;
+------+-------------+-------------+
| id | salary | salary2 |
+------+-------------+-------------+
| 100 | 23.12345695 | 23.12345612 | # 发现decimal的精度更准确,因此如果我们希望某
个数据表示高精度,选择decimal
+------+-------------+-------------+
说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。
建议:如果希望小数的精度高,推荐使用decimal。

4、字符串类型

(1)char

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


插入字符串长度是有限制的。

插入的结果是:

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

(2)varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

判断设置的varchar的边界,如下图:设置的正好是6个,汉字算一个字符,标点符号也算是一个字符


关于varchar(len),len到底是多大,这个len值,和表的编码密切相关。
varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字
节数是65532。
当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844因为utf中,一个字符占** **用3个字节,如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符
占用2字节)。

验证varchar的大小长度:

mysql> create table tt11(name varchar(21845))charset=utf8; --验证了utf8确实是不
能超过21844
ERROR 1118 (42000): Row size too large. The maximum row size for the used
table type, not counting BLOBs, is 65535. You have to change some columns to
TEXT or BLOBs
mysql> create table tt11(name varchar(21844)) charset=utf8;
Query OK, 0 rows affected (0.01 sec)

char和varchar的区别:

  1. 存储长度机制 char (n):固定占用 n 个字符位置,存入内容不足 n 位时,末尾自动填充空格补齐; varchar (n):最多容纳 n 个字符,存多少占用多少位置,不会额外补空格。

  2. 存储空间开销 char 空间大小完全固定;varchar 除了存储文本,会多 1~2 字节用来记录实际字符长度,整体数据参差不齐时更省磁盘。

  3. 尾部空格处理 char 查询返回时会自动截断末尾填充的空格;varchar 输入的空格会完整保存、原样读取。

  4. 查询性能 char 长度规整,数据库寻址读取更快;varchar 需要读取长度标识,速度略逊一筹。

  5. 使用场景 char 适合长度稳定不变的数据,如手机号、身份证号、状态码; varchar 适合长短差异大的内容,如姓名、地址、备注、描述文字。

(3)日期和时间类型

常用的日期有如下三个:
date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用
四字节
创建一个数据表


插入数据

插入的结果是

5、enum和set

语法:

enum:枚举,"单选类型"

enum('选项1','选项2','选项3',...);enum也可以以1,2 这样的下标插入(选择)

set:集合,"多选"类型

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


查看数据表votes的结构

插入数据

相关推荐
Nturmoils1 小时前
分页别写太顺手,LIMIT 背后还有排序和边界
数据库·后端
小饕1 小时前
RAG学习之【向量数据库】Milvus 从入门到精通:索引、检索、混合搜索一篇打通(RAG 必备)
数据库·人工智能·学习·milvus
kisdiem2 小时前
RAG ENGINEERING · 中文教程从文档到可靠答案
数据库
SilentSamsara2 小时前
向量数据库实战:Chroma/Milvus/Qdrant 选型与语义搜索应用
开发语言·数据库·人工智能·python·青少年编程·milvus
沪漂阿龙3 小时前
LangChain 系列之Agent:从固定流程到模型自主决策
服务器·数据库·langchain
zh_xuan3 小时前
PC端操作SQLite数据库
数据库·c++·sqlite
MXsoft6183 小时前
**采集节点主备模:保障监控系统自身高可用**
数据库
yyuuuzz3 小时前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
IT策士4 小时前
Redis 从入门到精通:Redis Stream —— 可靠消息队列
数据库·redis·缓存