✧(≖ ◡ ≖✿
目录
int类型
bit
浮点数
float
decimal
字符串类型
char
varchar
char VS varchar
日期、时间类型
格式
时间戳一定是自动改变的吗?
enum与set
在set列中怎么插入多个值呢?
插入时的底层
enum
set
举例
类型后置:C/C++中 int age; MySQL中 age int;
注意:整型一般操作是,溢出截断,默认创建时是有符号的。
int类型
| 类型 | 字节 |
| tinyint | 1 |
| smallint | 2 |
| mediumint | 3 |
| int | 4 |
| bigint | 8 |
bit
存在大小限制[1, 64]
当select时打印:
注意:
1.因为BIT类型在 MySQL 里是按位存储的,显示时按字节补足两位,而不是按你写入的位数显示。
2.显示默认是以16进制形式显示的。
3.无unsigned的bit类型。
浮点数
float double decimal
float
1.截断、四舍五入的规则更加有影响。
通过括号的方式来限定位数。
float(m, l); 代表至少m长度l个小数位。 此长度不包含小数点(符合直觉)
显示与溢出
同样的,double类型也可被定义。
decimal
优化解决了float的精度问题。
常被用于银行、金融机构等需高精度的计算要求。
字符串类型
编码格式对汉字的影响:
gbk:一个汉字两个字节
utf8:一个汉字三个字节!!!
注意:MySQL中以字符作为存储单位。(“1” “a” “好” 等在MySQL下均是一个字符大小)
常用的字符单位是char varchar
char
范围[0,255]字符
char代表定长类型。
varchar
数据库尽量节省空间的体现类型
“变长字符类型”
最大值:utf-8下是21845 GBK下是32766。(65535字节/3 或者 65535字节/2)
特性:
1.当定义varchar(3),却只容纳了“中”,实际上占用了小于3个字符大小。
2.varchar内有额外1~3字节记录实际上使用的空间大小。
这就是为什么虽然上限是21845却只能创建21844大小
注意:表的单行大小也存在限制---65535字节。
char VS varchar
我们应该从两方面入手:“长度易变?” “常用长度大小”
仅易变且长度较大(像游戏用户名)推荐使用varchar。其他情况均建议使用char定长。(当然具体肯定要结合实际来讨论)
日期、时间类型
date datetime datestamp
仅存在三种类型:日期(年月日)、日期时间(年月日时分秒)和时间戳(年月日时分秒)
格式
date:YYYY-MM-DD
datetime:YYYY-MM-DD HH:MM:SS
datestamp:YY-MM-DD HH:MM:SS
举例
insert into 表名 values ('2001-01-01', '1949-09-09 09:09:09', '2025-01-01 12:00:00');更改
update 表名 set 列名 = 新值 where 定位条件;时间戳:隶属于当前行,一旦行内数据发生于原本数据不一致的变化,便会自动更改为变化发生时的时间。
注意:
1.英文引号 '' 引入输入内容。
2.特定类型的格式约束。
3.更改时间戳所在行内某属性值与原本值相同时,时间戳不会发生改变。
时间戳一定是自动改变的吗?
不一定,只有当时间戳列属性为:“CURRENT_TIMESTAMP”
与“DEFAULT_GENERATED on update CURRENT_TIMESTAMP”
enum与set
枚举与集合
enum:单选,从预定义列表中选择一个值;
set:多选,从预定义列表中选择零个或多个值;
create table t9_es(gender enum('女', '男', '保密'), hobby set('乒乓球','代码','电脑'));在set列中怎么插入多个值呢?
位于一个单引号引用内,仅使用,隔开。(不可有空格)
select
插入时的底层
在MySQL中放弃了0作为索引下标第一个的方法,而是看作“真”与“假”的评判。因此以“1”开启头部索引。
实际上enum的选项就是从1开始第一位是1,第二位是2。
set的选项依赖的是“位图结构”位图为1即对应选项激活。
enum
set
set从二进制比特位是“反过来”看的
举例
使用 2, 3分别作enum与set插入
感谢支持,长期连载
欢迎关注