Files
rikako-note/mysql/mysql文档/Data Type.md
wu xiangkai 157744bda1 日常提交
2022-09-23 19:38:10 +08:00

3.7 KiB
Raw Blame History

Mysql Data Type

Mysql数字类型语法

整型数据类型

对于整型数据类型M代表最大的显示宽度。该最大显示宽度是255。显示宽度和该整型类型可以存储范围的值没有关系。在mysql 8.0.17中整型的M值已经被遗弃。

# M限定为4并不会限制INT类型可以存储值的范围
INT(4)

将M限定为4时当应用使用该字段整型值时如果该字段值显示宽度小于M会在左边填充空格

非整型数据类型

对于浮点类型和fixed-point数据类型M代表该字段总共能够存储多少位M为能存储的最多位长度十进制

zerofill

对于数字类型的类型可以为其指定zerofill在指定为zerofill后会为其自动添加unsigned约束该数字类型字段存储的值不论是整型还是浮点数均需要为非负值。

# zerofill修饰的字段,如果显示宽度小于M,那么都会在左边填充0

# 其等同于INT(10) UNSIGNED ZEROFILL
INT(10) ZEROFILL

DECIMAL(28,2) ZEROFILL

在mysql8.0.17zerofill对于数值类型字段也被遗弃了

unsigned

对于数值类型的字段可以支持unsiged和signed属性。默认情况下数值类型是signed的可以手动将其指定为unsigned。 在mysql8.0.17对于float、decimal、double类型unsigned属性也被遗弃了。可以通过简单的check来进行替换

serial

serial是一个对于BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的alias。

# 如下字段定义
id serial
# 等同于
id bigint unsigned not null auto_increment unique

BIT[(M)]

bit值类型M代表每个值的bit位数M值可以从1到64默认情况下若M省略M为1

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

8位整型有符号范围为-128到127无符号范围为0到255

BOOL,BOOLEAN

该类型等同于TINYINT(1)值为0代表false值非0代表true

SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

16位整型有符号范围为 -32768到32767无符号范围为0 到 65535

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

24位整型有符号范围为-8388608到8388607无符号范围为 0 到16777215

INT[(M)] [UNSIGNED] [ZEROFILL]

32位整型有符号范围为-2147483648 到2147483647无符号范围为0 到4294967295

BIGINT[(M)] [UNSIGNED] [ZEROFILL]

64位整型有符号范围为 -9223372036854775808到9223372036854775807无符号范围为0到18446744073709551615

所有算数都是使用带符号的bigint或者double进行运算故而不要使用bigint大于 9223372036854775807 63bit

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

fixed-point nubmerM是非整型的总共的位数而D对应的则是小数点之后的位数。小数点和负的符号并不包含在M中。
如果D是0则代表该数没有小数部分。***对于DECIMAL来说M最大值为65D受支持的最大值为30如果D省略则D默认为0若M省略那么M的默认值为10

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

单精度浮点数M为非整型总共的位数D为小数点之后的位数。如果M和D省略那么会根据硬件的限制来存储。单精度浮点数大概精确到小数点后7位。

FLOAT(M,D)是一个非标准的mysql拓展在mysql 8.0.17中,该语法被废弃

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

双精度浮点数其精度大概精确到小数点后15位

DECIMAL和NUMERIC

DECIMAL和NUMERIC用于存储高精度的数值类型当保存数字的精度很重要时需要使用这些类型如货币数据。在mysql中NUMERIC类型被实现为DECIMAL

BIT

对于bit类型其赋值可以使用b'value'其中value为二进制类型。

# 其返回值为true
select b'011' = 3;