MySQL数据类型(一)

发布于 2022-07-03  2.94k 次阅读


一,类型概述

类型
具体类型
整数类型
TINYINT, SMALLINT, MEDIUMINT, INT(或INTEGER), BIGINT
浮点类型
FLOAT, DOUBLE
定点数类型
DECIMAL
位类型
BIT
日期类型
YEAR, TIME, DATE, DATETIME, TIMESTAMP
字符串类型
CHAR, VARCHAR,
文本类型
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT
枚举类型
ENUM
集合类型
SET
二进制字符串类型
BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB
JSON类型
JSON对象, JSON数组
空间数据类型
单值类型:GEOMETRY, POINT, LINESTRING, POLYGON
集合类型:MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION

常见数据类型的属性:

MySQL关键字
含义
NULL
数据列可包含NULL值
NOT NULL
数据列不允许包含NULL值
DEFAULT
默认值
PRIMARY KEY
主键
AUTO_INCREMENT
自动递增
UNSIGNED
无符号
CHARACTER SET name
指定一个字符集

二,整型数据类型

整型数据类型一共有5种,包括YINYINT, SMALLINT, MEDIUMINT, INT(INTEGER)和BIGINT

整数类型
字节
有符号数取值范围
无符号数取值范围
TINYINT
1
-128 ~ 127
0 ~ 255
SMALLINT
2
-32768 ~ 32767
0 ~ 65535
MEDIUMINT
3
-8388608 ~ 8388607
0 ~ 16777215
INT, INTEGER
4
-2147483648〜2147483647
0〜4294967295
BIGINT
8
-9223372036854775808〜9223372036854775807
0〜18446744073709551615
在具体的赋值过程中,数值最大不能超过数据类型的最大取值范围,最小不能超过数据类型的最小取值范围

演示表:

//创建一个表
CREATE TABLE inttest(
    tinyint1 TINYINT,
    smallint1 SMALLINT,
    mediumint1 MEDIUMINT,
    int12 INT,
    bigint1 BIGINT
)

例1:超出取值范围

//对字段进行赋值(超出取值范围)
INSERT INTO inttest(tinyint1) VALUES(128);
//错误信息
> 1264 - Out of range value for column 'tinyint1' at row 1

一,整数类型可选属性

可选属性主要有三个:

  1. M显示宽度
  2. UNSIGNED无符号
  3. ZEROFULL填充

一,M显示宽度

M的概念:表示显示宽度,它的取值范围是(0,255)

  如:int(5) 它的显示宽度就是为5,当数值小于5时在数字前面需要用字符填满宽度。该项填充功能需要配合"ZEROFILL"使用,表示用"0"填满宽度,否则指定显示宽度无效

显示宽度与类型可以存储的取值范围无关,当数值超过了显示宽度但没有超过类型范围不会对插入数据造成影响

注:在Mysql5.7之前,在建表时如果不指定显示宽度,那么显示宽度和类型最大值的宽度一致。但在MySQL8.0.17开始,整数数据类型不推荐使用宽度属性,也不会有默认宽度

CREATE TABLE inttest(
    tinyint1 TINYINT,
    smallint1 SMALLINT,
    mediumint1 MEDIUMINT,
    int12 INT,
    bigint1 BIGINT
)

例1:

//建一个对比表
CREATE TABLE inttest1(
    int10 INT,
    int11 INT(5),
    int12 INT(5) ZEROFILL
)
//插入数据
INSERT INTO inttest1 VALUES(123,123,123),(123456,123456,123456)
//查看数据
SELECT * FROM inttest1;