请教高手:SQL如何获取某个数据类型的最大值
发布网友
发布时间:2022-03-28 07:34
我来回答
共1个回答
热心网友
时间:2022-03-28 09:03
这个 需要一些基础的计算机原理知识
拿整数类型为例(int,smallin.tinyint.bigint) 后面的括号写多少数字 就是这个数字最大10进制的位数+1 的存放空间。 另外还要看是否是支持负值。
举例 Tinyint(4) uz 就是 8位bit的整数 取值范围 0-255
三位数最大999 +1 就是4 所以4代表了 3位数,而三位数的 bit位是byte 也就是8位(二进制)整数 uz无符号。就是不支持负值。所以是0-255
tinyint(4) 就是有符号的8位整数 取值范围 -127~127
smallint(6) uz 最大值65535 最小0 也就是16位整数
int(11) 最大值 2147483647 最小 -2147483647 10位数(10进制),所以括号里写11
int(11) uz 最大值就是4294967295,最小0
以此类推,所以 bigint(20) 对应的就是长整形(64位long), tinyint(1) 对应的就是1bit 也就是 0或者1 用于表示bool
enum枚举实际上可以是 8位、16位、32位整数的 枚举型式。mysql的美剧比较奇怪 是从1开始算 不是0.
set 的话 实际上 也可以是 8位 16 位 32位 64位等等的 集合类型。 64个元素就是64位的bits
至于字符串实际上是 char的数组 如果是utf8编码实际对应的bits还不一定相等。utf16的话 如果支持Notnull的字符串,每个字符一定需要16bits 如果可以为null的话 支持的长度 相当于少两个字节 也就是 少16bits
比如varchar(16) notnull 实际需要 16~48个字节的存储空间 utf-8编码就是这么蛋疼 utf-16
编码就固定为32个字节。(英文字符多的话,反而浪费空间。全汉字省空间)
varchar(15) 可以为null的话 实际需要16~48个字节的存储空间。