Mysql基础问题

文章详细解释了MySQL中int类型的显示宽度、varchar的字符与字节区别、timestamp和datetime的时间范围及时区处理,以及NULL的特性和在查询中的处理方式。同时提到了整型越界的情况,当超过int的最大值时,数值不会回绕而是保持最大值不变。
摘要由CSDN通过智能技术生成

一、int(11)和int(10)里的数字到底什么意思?
1、如果一个字段设置了无符号和填充零属性,那么无论这个字段存储什么数值,数值的长度都会与设置的显示宽度一致,比如int(11),插入数值 1 显示为00000000001,左边补了 10 个零直至长度达到 11 位;
2、设置字段的显示宽度并不限制字段存储值的范围,比如字段 d 设置为 int(5),但是仍然可以存储 1234567890 这个 10 位数字;
3、设置的字符宽度只对数值长度不满足宽度时有效,如 d 字段 int(5),插入 1 时,长度不足 5,因此在左边补充 4 个零直到 5 位,但是插入 1234567890 时超过了 5 位,这时的显示宽度就起不了作用了。

二、varchar(10) 的10是字节还是字符?
1、字符和字节的区别:
字符 人们使用的记号,抽象意义上的一个符号。一个汉字和英文就是一个字符,如’1’, ‘中’, ‘a’, ‘$’, ‘¥’,……
字节 计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间,如0x01, 0x45, 0xFA,……
2、gbk编码 1个中文字符=2个字节 ,1个字节=8个位,一个英文字母字符存储需要1个字节 ;varchar(20)指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,每个字符最多占2个字节,最大长度不能超过32766【327662=65532字节】;
3、utf-8编码 1个中文字符=3个字节 ,1个字节=8个位,一个英文字母字符存储需要1个字节,varchar(20)指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,每个字符最多占3个字节,最大长度不能超过21845【21845
3=65535字节】。

三、timestamp和datetime到底什么区别?
1、datetime占8 字节,timestamp占4 字节;
2、datetime范围’1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’,timestamp范围’1970-01-01 00:00:01.000000’ to ‘2038-01-19 03:14:07.999999’;
3、timestamp 只占 4 个字节,而且是以utc的格式储存, 它会自动检索当前时区并进行转换,datetime以 8 个字节储存,不会进行时区的检索。

四、NULL到底是什么概念?
1、NULL是什么,Compact Row Format前提下,每个行记录都会有一个Bit vector来记录行中出现NULL的字段,长度为 N / 8 向上取整,其中 N为值NULL的字段数;
2、NULL与查询,如果要查询某个字段为NULL,不能使用 = NULL,必须使用 IS NULL,如果要查询某个字段不为NULL,不能使用 != NULL,必须使用 IS NOT NULL;
3、如果查询一个存在NULL可能的字段不为某个特定值时, != 运算将不包含该字段为NULL的记录;
4、NULL也不能被用于范围查询,即NULL与非NULL值无法比较大小;MySQL会对NULL字段也进行索引,但是只有IS NULL的方式会使用上索引;
5、NULL值与其他值进行运算,结果总是为NULL;
6、COUNT(*):不管字段为什么,计算存在的行;COUNT(column_name):结果不包含字段为NULL的记录;
7、排序时,ASC时,NULL值在所有其他值之前;DESC时,NULL值在所有其他值之后。

五、什么是隐式转换?
官方文档翻译
1、如果一个或两个参数均为NULL,则比较的结果为NULL,除了 相等比较运算符。对于NULL NULL,结果为true。
2、如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。
3、如果两个参数都是整数,则将它们作为整数进行比较。
4、如果不与数字比较,则将十六进制值视为二进制字符串。
5、如果参数之一是 timestamp 或 datatime column,而另一个参数是常量,则在执行比较之前,该常量将转换为时间戳。
6、如果参数之一是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较;7、如果另一个参数是浮点值,则将参数作为浮点值进行比较。
8、在所有其他情况下,将参数作为浮点数(实数)进行比较。例如,将字符串和数字操作数进行比较,将其作为浮点数的比较。

六、整型越界会导致什么?
如数据类型是int(11),最大值达到2147483647后就再也上加不去了;比如update的时候采用2147483645+5,本来应该是2147483650,但是值还是2147483647;越界也没有回绕而变成负值,而只是加到最大值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值