mysql数据类型
mysql数据类型-int
int 的有符号和无符号的区别
- 有符号的int可以插入负值,无符号的int不可以插入负值
整型的每一种都分无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。
无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个smallint能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。
由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。
简而言之就是由于Int型占4字节,也就是16位,2^16 = 65535,如果有符号位就+ -两边均分,如果没有就全给+。
int 有符号测试
#创建一个有符号的int类型的abc的表 create table bcd (a int,b int);#int类型不声明则默认为有符号 #插入数据 insert into bcd values(1,2); #查询数据 select * from bcd; #查询2-1:结果为1 select b-a from bcd; #查询1-2:结果为-1 select a-b from bcd;
测试结果:
int 无符号测试
#创建一个无符号的int类型的abc的表 create TABLE abc (a int unsigned,b int unsigned); #插入数据 insert into abc values(1,2); #查询数据 select * from abc; #查询2-1:结果为1 select b-a from abc; #查询1-2:结果异常 select a-b from abc;
测试结果:超出精度异常
int(n):其中的n是什么意思?
-
n 的意思是显示长度:若结果长度小于 n 则会自动前面加 0 进行补齐,若结果长度不小于 n 则正常显示
#创建一个int(4)的数据库表 create table test_int_n (a int(4) zerofill);-- Ps:若不加 zerofill 则没什么鸟用 #在里面插入两条数据(一个值为1;一个值为123456) insert into test_int_n values(1),(123456);
#mysql bin 命令行>查询结果
Ps:在工具中查询无效果
mysql中的int自增
- 1.自增只能创建在主键上面
- 2. null 和 0 都可以自自增
- 3. 可以在自增列插入负值
1.自增只能创建在主键上面
#创建自动增长:会报错 create table test_auto_increment(a int auto_increment);
\
#创建自动增长:创建成功 create table test_auto_increment(a int auto_increment primary key);
null 和 0 都可以自增
测试插入 null
#在自增表里面插入数据 insert into test_auto_increment values(null),(10),(null),(100),(null); #查询自增表中的数据 select * from test_auto_increment;
测试插入0
插入前查询
#在自增表中插入0:是和null一样自增的 insert into test_auto_increment values(0);
插入后查询:
Ps : 插入 0 或 插入 null 执行一次后结果为 102 ,若把 102 删除后,再执行插入 0 或 插入 null ,则会在 102 的基础上自增,无关 102 是否被删除
3.可以在自增列插入负值
#在自增表中插入负值:是可以执行成功的
insert into test_auto_increment values(-1);
mysql数据类型-字符类型
字符(n)中的 n 是字符还是字节?
char(n) 和varchar(n) 中的 n 是字符还是字节?
答:字符。
text(n) 中的 n 是字符还是字节?
答:字节。
除了 char 和 varchar 中的 n 是字符,其他的都是字节。
数据库中有true和false吗?
数据库中只有0和1,没有true和false;
1:相当于 true;0:相当于false。
#1:相当于true select 'a' = 'a'; #0:相当于false select 'a' = 'b';
运行结果:
数据库中排序规则里面的 bin 和 ci 是什么意思?
bin:二进制的方式存储的,大小写敏感(不会忽略大小写)。
ci:大小写不敏感(会忽略大小写)。
sql测试:
1:相当于 true;0:相当于false。
#设置为utf8mb4_bin set names utf8mb4 collate utf8mb4_bin;
1:相当于 true;0:相当于false。
mysql 获取varchar类型数字最大值
SELECT MAX(CAST(no AS SIGNED)) FROM sys_user ;
mysql数据类型-时间类型
date、timestamp和datetime的区别是什么?
- date表示日期,其范围为1000-01-01到9999-12-31
- datetime表示日期时间,其范围是1000-01-01 00:00:00到9999-12-31 23:59:59
- timestamp表示时间戳,1970-01-01 00:00:00到2038-01-19 03:14:07,timestamp具有自动初始化和自动更新功能。
timestamp:有时区的概念;datetime:没有时区的概念
sql测试timestamp和datetime的区别
#创建一个时间类型的表 create table test_time (a timestamp,b datetime); #插入数据 insert into test_time values(NOW(),NOW());
#查询时间的环境变量 select @@time_zone;
当时间的环境变量为 SYSTEM 时,看不出区别
#修改时间的环境变量 set time_zone='+00:00';
当时间的环境变量为 +00:00时,则可以看出两个时间不同
一般所有时间都是北京东八区的时间。