我是靠谱客的博主 无辜咖啡豆,最近开发中收集的这篇文章主要介绍Mysql5.7 基本数据类型全解析数值类型日期和时间类型字符串类型空间数据类型JSON数据类型数据类型默认值数据类型存储大小使用其他数据库引擎中的数据类型参考链接,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
文章目录
- 数值类型
- 语法
- 整数类型(精确值) TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
- 存储空间和范围
- 定点类型(精确值)DECIMAL,NUMERIC
- 浮点类型(近似值)FLOAT,DOUBLE
- 位值类型 BIT
- 超出范围和溢出处理
- 日期和时间类型
- DATE
- DATETIME
- TIME
- TIMESTAMP
- YEAR
- 字符串类型
- 语法
- CHAR
- VARCHAR
- BINARY
- VARBINARY
- CHAR 和 VARCHAR 类型
- BINARY 和 VARBINARY 类型
- BLOB 和 TEXT 类型
- ENUM类型
- SET类型
- 空间数据类型
- JSON数据类型
- 数据类型默认值
- 插入更新规则
- 隐式默认值
- 数据类型存储大小
- 数字类型存储要求
- 日期和时间类型存储要求
- 字符串类型存储要求
- 使用其他数据库引擎中的数据类型
- 参考链接
- 数据类型描述使用以下约定:
- 对于整数类型,M 表示最大显示宽度。对于浮点和定点类型, M 是可以存储的总位数(精度)。
- 对于字符串类型, M 是最大长度。 M 的最大允许值取决于数据类型。
- D 适用于浮点和定点类型,并 表示小数点后的位数(小数位数)。可能的最大值为 30,但不应大于 M -2.
数值类型
语法
- 对于整数数据类型,* M *table 示最大显示宽度。最大显示宽度为 255.显示宽度与类型可以存储的值的范围无关
- 对于浮点和定点数据类型,* M *是可存储的总位数。
- 允许UNSIGNED属性的数值数据类型也允许SIGNED。但是,这些数据类型默认情况下是带符号的,因此SIGNED属性无效。
整数类型(精确值) TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
存储空间和范围
定点类型(精确值)DECIMAL,NUMERIC
- DECIMAL和NUMERIC类型存储精确的数字数据值。当保留精确度很重要时,例如使用货币数据,则可以使用这些类型。
- 在DECIMAL列声明中,可以(通常是)指定精度和小数位数
salary DECIMAL(5,2)
- 如果小数位数为 0,则DECIMAL值不包含小数点或小数部分。
浮点类型(近似值)FLOAT,DOUBLE
- FLOAT和DOUBLE类型 table 示近似数字数据值。 MySQL 将四个字节用于单精度值,并将八个字节用于双精度值。
- MySQL 在存储值时执行舍入,因此,如果将999.00009插入FLOAT(7,4)列,则近似结果为999.0001。
- 由于浮点值是近似值而不是作为精确值存储的,因此在比较中尝试将它们视为精确值可能会导致问题。它们还受平台或实现依赖性的约束。
位值类型 BIT
- BIT数据类型用于存储位值。 BIT(M)类型可以存储* M *位值。 * M *的范围是 1 到 64.
- 如果您为长度小于* M *的BIT(M)列分配一个值,则该值将在左侧填充零。例如,将b’101’的值分配给BIT(6)列实际上与分配b’000101’相同。
超出范围和溢出处理
- 当 MySQL 在数值列中存储的值超出列数据类型的允许范围时,结果取决于当时有效的 SQL 模式:
- 如果启用了严格的 SQL 模式,则按照 SQL 标准,MySQL 会拒绝超出范围的值并产生错误,并且插入将失败。
- 如果未启用任何限制模式,MySQL 会将值裁剪到列数据类型范围的适当端点,并存储结果值。
日期和时间类型
- DATE,TIME,DATETIME,TIMESTAMP和YEAR。
- 每个时间类型都有一个有效值范围,以及一个“零”值,当您指定 MySQL 无法代 table 的无效值时可以使用该值。
- TIMESTAMP和DATETIME类型具有特殊的自动更新行为
- 默认情况下,当 MySQL 遇到日期或时间类型的值超出范围或对该类型无效时,它将将该值转换为该类型的“零”值。
exception 是超出范围的TIME值被裁剪到TIME范围的适当端点。
DATE
- 支持的范围是’1000-01-01’到’9999-12-31’
DATETIME
- 支持的范围是’1000-01-01 00:00:00.000000’到’9999-12-31 23:59:59.999999’。
- MySQL 以’YYYY-MM-DD hh:mm:ss[.fraction]'格式显示DATETIME值,但允许使用字符串或数字将值分配给DATETIME列。
- 可以指定一个介于 0 到 6 之间的* fsp *值,以指定小数秒精度。值为 0table 示没有小数部分。如果省略,则默认精度为 0.
- TIMESTAMP值存储为从纪元(‘1970-01-01 00:00:00’ UTC)起的秒数。
- TIMESTAMP不能 table 示值’1970-01-01 00:00:00’,因为它等于从纪元开始的 0 秒,并且保留值 0 来 table 示’0000-00-00 00:00:00’(“零” TIMESTAMP值)。
TIME
-
一次范围是’-838:59:59.000000’至’838:59:59.000000’。
-
MySQL 以’hh:mm:ss[.fraction]'格式显示TIME值,但允许使用字符串或数字将值分配给TIME列。
-
可以指定一个介于 0 到 6 之间的* fsp *值,以指定小数秒精度。值为 0table 示没有小数部分。如果省略,则默认精度为 0.
TIMESTAMP
- 范围是’1970-01-01 00:00:01.000000’ UTC 到’2038-01-19 03:14:07.999999’ UTC。
YEAR
- 4 位数字格式的年份。 MySQL 以YYYY *格式显示YEAR个值,但允许使用字符串或数字将值分配给YEAR列。
- 值显示为1901至2155或0000。
字符串类型
- 字符串数据类型为CHAR,VARCHAR,BINARY,VARBINARY,BLOB,TEXT,ENUM和SET
语法
对于字符串列(CHAR,VARCHAR和TEXT类型)的定义,MySQL 以字符单位解释长度规范。对于二进制字符串列(BINARY,VARBINARY和BLOB类型)的定义,MySQL 以字节为单位解释长度规范。
CHAR
- 一个固定长度的字符串,在存储时总是用空格填充到指定的长度。 * M *table 示以字符为单位的列长。 * M 的范围是 0 到 255.如果省略 M *,则长度是 1.
- MySQL 允许您创建CHAR(0)类型的列.只能包含值NULL和’’(空字符串)
VARCHAR
- 可变长度的字符串。 * M *table 示最大列长度,以字符为单位。 * M *的范围是 0 到 65,535.
- MySQL 将VARCHAR值存储为 1 字节或 2 字节长的前缀以及数据。长度前缀指示值中的字节数。如果值要求不超过 255 个字节,则VARCHAR列使用一个长度字节;如果值可能需要不超过 255 个字节,则VARCHAR列使用两个长度字节。
BINARY
- BINARY类型类似于CHAR类型,但是存储二进制字节字符串而不是非二进制字符串。可选长度* M table 示以字节为单位的列长度。如果省略,则 M *默认为 1.
VARBINARY
- VARBINARY类型类似于VARCHAR类型,但是存储二进制字节字符串而不是非二进制字符串。 * M *table 示最大列长度(以字节为单位)。
CHAR 和 VARCHAR 类型
- CHAR和VARCHAR类型相似,但是它们的存储和检索方式不同。它们的最大长度以及是否保留尾随空格也不同。
- 声明CHAR和VARCHAR类型的长度,该长度指示您要存储的最大字符数。例如,CHAR(30)最多可容纳 30 个字符。
- 检索CHAR值时,除非启用了PAD_CHAR_TO_FULL_LENGTH SQL 模式,否则删除尾随空格。
- VARCHAR值在存储时不会填充。根据标准 SQL,在存储和检索值时保留尾随空格。
BINARY 和 VARBINARY 类型
- BINARY和VARBINARY类型与CHAR和VARCHAR类似,除了它们存储二进制字符串而不是非二进制字符串。即,它们存储字节字符串而不是字符串。
- 存储BINARY个值时,将使用填充值将其右填充到指定的长度。填充值为0x00(零字节)。值用0x00右填充以进行插入,并且不删除尾随字节以进行检索
- 示例:对于BINARY(3)列,插入时’a ‘变为’a ’。插入时,‘a ’变为’a ’。两个插入的值均保持不变以进行检索。
- 对于VARBINARY,插入没有填充,也没有剥离任何字节以进行检索。所有字节在比较中都是有效的,包括ORDER BY和DISTINCT操作。
BLOB 和 TEXT 类型
- TINYBLOB,BLOB,MEDIUMBLOB和LONGBLOB
- TINYTEXT,TEXT,MEDIUMTEXT和LONGTEXT
- BLOB值被视为二进制字符串(字节字符串),TEXT值被视为非二进制字符串(字符字符串)。。四种TEXT类型对应四种BLOB类型,并且具有相同的最大长度和存储要求。
- 对于TEXT和BLOB列,插入时没有填充,选择时也不会删除字节。
- 对于BLOB和TEXT列上的索引,必须指定索引前缀长度。对于CHAR和VARCHAR,前缀长度是可选的
- BLOB和TEXT列不能具有DEFAULT值
ENUM类型
SET类型
- 定义中的重复值会导致警告,如果启用了严格的 SQL 模式,则会导致错误。
空间数据类型
JSON数据类型
数据类型默认值
- 不能为BLOB,TEXT,GEOMETRY和JSON数据类型分配默认值。
- 如果在定义列时没有显式指定默认值(DEFAULT value),MySQL 将按以下方式设置默认值
- 如果该列可以使用NULL作为值,则使用显式DEFAULT NULL子句定义该列
- 如果该列不能使用NULL作为值,则 MySQL 定义该列时不带显式DEFAULT子句。
插入更新规则
为了将数据 Importing 到没有显式DEFAULT子句的NOT NULL列中,如果INSERT或REPLACE语句不包含该列的值,或者UPDATE语句将列设置为NULL,则 MySQL 将根据有效的 SQL 模式处理该列。
- 严格模式
- 事务 table 将发生错误,并且该语句将回滚。
- 对于非事务 table,会发生错误,但是如果此错误发生在多行语句的第二行或后续行中,则会插入前面的行。- 非严格模式
- MySQL 将列设置为列数据类型的隐式默认值。
隐式默认值
- 对于数字类型,默认值为0,但对于使用AUTO_INCREMENT属性声明的整数或浮点类型,默认值为序列中的下一个值。
- 对于TIMESTAMP以外的日期和时间类型,默认值为该类型的适当“零”值。
- 对于ENUM以外的其他字符串类型,默认值为空字符串。对于ENUM,默认值为第一个枚举值。
数据类型存储大小
- table 的内部 table 示形式的最大行大小为 65,535 字节,即使存储引擎能够支持更大的行也是如此
数字类型存储要求
日期和时间类型存储要求
字符串类型存储要求
- 要计算用于存储特定的CHAR,VARCHAR或TEXT列值的字节数,必须考虑用于该列的字符集以及该值是否包含多字节字符。特别是在使用utf8 Unicode 字符集时,必须记住,并非所有字符都使用相同数量的字节。 utf8mb3和utf8mb4字符集每个字符分别最多需要三个和四个字节
使用其他数据库引擎中的数据类型
参考链接
Mysql 官网
Mysql 5.7 中文文档
深入浅出MySQL:数据库开发、优化与管理维护(第2版)
最后
以上就是无辜咖啡豆为你收集整理的Mysql5.7 基本数据类型全解析数值类型日期和时间类型字符串类型空间数据类型JSON数据类型数据类型默认值数据类型存储大小使用其他数据库引擎中的数据类型参考链接的全部内容,希望文章能够帮你解决Mysql5.7 基本数据类型全解析数值类型日期和时间类型字符串类型空间数据类型JSON数据类型数据类型默认值数据类型存储大小使用其他数据库引擎中的数据类型参考链接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复