4.mysql数据类型

mysql数据类型太枯燥了,先来几个问题吧,资料放后面记录着,有时间可以翻着查一下

问题1:mysql 中 int类型,最常用的是什么?

在项目中使用BIGINT,而且是有符号的,无符号的计算   1-2 =-1 产生负数的时候,会出现错误

演示代码:

create table test_unsigned(a int unsigned, b int unsigned);
insert into test_unsigned values(1, 2);
select b - a from test_unsigned;
select a - b from test_unsigned;  --运行出错

问题2:INT(N)是什么?

create table test_int_n(a int(4) zerofill);
 insert into test_int_n values(1);
 insert into test_int_n values(123456);
  1. int(N)中的 N 是显示宽度, 不表示 存储的数字的 长度 的上限。
  2. zerofill 表示当存储的数字 长度 < N 时,用 数字0 填充左边,直至补满长度 N(注:在Navicat 工具上,看不到补0,但是在linux查出来,是补 0 的)
  3. 当存储数字的长度 超过N时 ,按照 实际存储 的数字显

 

自动增长的面试题

题1:这列语法有错误吗?

 create table test_auto_increment(a int auto_increment);

肯定有,自增长必须是主键才能自增长

 create table test_auto_increment(a int auto_increment primary key);

题2:以下结果是什么?

insert into test_auto_increment values(NULL);  自增1
insert into test_auto_increment values(0);   自增1
insert into test_auto_increment values(-1);  插入-1
insert into test_auto_increment values(null),(100),(null),(10),(null)

遇到null的时候,是自增1,插入0也是自增1,其他的 -1, 100,都会自动插入

当插入到100 的时候,自增长从100开始自增

排序规则

select 'a' = 'A';   # 答:1
create table test_ci (a varchar(10), key(a));
insert into test_ci values('a');
insert into test_ci values('A');

select * from test_ci where a = 'a';   --结果是什么?
set names utf8mb4 collate utf8mb4_bin

答:跟排序规规则有关系,区别:

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。
utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会造成不良后果
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容

utf8_general_ci校对速度快,但准确度稍差。
utf8_unicode_ci准确度高,但校对速度稍慢。

用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。
通常情况下 utf8_general_ci的准确性就够我们用的了,
所以新建数据 库时一般选用utf8_general_ci就可以了

时间类型

题1 datatime与timestamp区别?

create table test_time(a timestamp, b datetime);
insert into test_time values (now(), now());
select * from test_time;   ##这时候查询出的时间是一样的
select @@time_zone;        ## 这时候是本地时区,时间是一样的
set time_zone='+00:00';    ## 当设置时区后,下面的查询,就会有变化
select * from test_time;   ## timestamp会往前推 8小时 ,datatime则不会


结论:timestamp存储和时区相关,即会根据时区做转换
如:+8时区存进去, 而在+9时区取出,则时间为+9时区的时间
而datetime存储和时区不相关,不会做转换

JSON数据类型

 在mysql 5.7后,增加了数据类型,json数据类型,之前我们公司用varchar把json存进去,然后在用代码解析出来

mysql提供了一个json的数据类型,感觉有点像mongoDb一样的,存什么进去都可以,具体还没太熟悉使用,只是看了点资料,故做笔记

mysql提供了一些对json的函数

https://dev.mysql.com/doc/refman/5.7/en/json-function-reference.html

json_merge 合并数据并返回

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值