类型后置: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插入

总结
到此这篇关于mysql数据库中的数据类型文章就介绍到这了,更多相关mysql数据类型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论