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的结构

插入数据

相关推荐
运维行者_3 小时前
企业无线网络监控的挑战与智能化演进趋势
大数据·运维·服务器·网络·数据库
国强_dev3 小时前
技术探讨:使用 stunnel 加密转发数据库连接时,如何获取客户端真实 IP?
数据库·网络协议·tcp/ip
@insist1233 小时前
系统规划与管理师-信息系统规划核心工作要点解析
数据库·软考·系统规划与管理师·软件水平考试·系统规划与管理工程师
超级数据查看器3 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
数安3000天4 小时前
增量数据如何自动分类分级,避免目录“过期“?
大数据·数据库
南墙上的石头5 小时前
麒麟 V10 重装人大金仓 V8R6 踩坑实录(含 MySQL 兼容模式)
数据库·mysql
画中有画6 小时前
论向量数据库在项目中的应用
数据库
spider_xcxc6 小时前
Redis 数据库高质量实践指南(一)
运维·数据库·redis·oracle·云计算
l1t7 小时前
在linux和windows中解决duckdb 1.6dev版本输出执行计划报错问题
linux·运维·数据库·windows·duckdb
执子手 吹散苍茫茫烟波7 小时前
RC 隔离级别下 MySQL InnoDB 死锁典型案例
数据库·mysql