mysql数据类型关键字_Mysql基本数据类型

ee95fcf94ae78ae318811d40d79128b8.png

Float和Double

MySQL将四个字节用于单精度值,并将八个字节用于双精度值。Float、DOUBLE类型代表近似数值。对于FLOAT,SQL标准允许对FLOAT括号中的关键字后面的位以精度(但不允许指数的范围)进行可选的规范。由于浮点值是近似值而不是作为精确值存储的,因此在比较中尝试将它们视为精确值可能会导致问题。它们还受平台或 实现依赖性的约束。如果需要表示的精确度很高时,如货币数据,最好使用decimal。

DECIMAL

DECIMAL以字符串的形式存储, 可能的最大取值范围与 DOUBLE 相同,但是有效的取值范围由 M 和 D 决定。DECIMAL(M,D)如果改变 M 而固定 D,则取值范围将随 M 的变大而变大。M的默认值为10,D的默认值是0.(精确的行为是特定于操作系统的,但是通常效果是将其截断为允许的位数。)

例如 decimal(5,2),5是精度,2是小数位数。精度表示值存储的有效位数,小数位数表示小数点后可以存储的位数。所以可以表示为123.12

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;但缺点是会引起精度问题。并且两个浮点数进行减法和比较运算时也容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。

TIMESTAMP与DATETIME

TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换。

BINARY和VARBINARY

BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

在将数据转换为二进制数据时,SQL Server会对生成的二进制数据进行填充或截断。

当BINARY被存储的值,它们被右侧填充垫值到指定的长度。填充值为0x00(零字节)。值在0x00插入时用右填充,不会删除尾随字节以进行检索。所有字节在比较中都很重要,包括ORDER BY和DISTINCT操作。 0x00比较中,空间和空间有所不同,0x00先于空间进行 排序。

示例:对于BINARY(3)列, 在插入时'a '变为 'a \0'。 插入时'a\0'变为'a\0\0'。两个插入的值均保持不变以进行检索。

对于VARBINARY,没有用于插入的填充,也没有剥离任何字节以进行检索。所有字节在比较中都很重要,包括ORDER BY和DISTINCT操作。 0x00比较中,空间和空间有所不同,0x00先于空间进行 排序。

对于那些删除尾部填充字节或比较将其忽略的情况,如果一列具有要求唯一值的索引,则将仅尾部填充字节数不同的值插入该列会导致重复键错误。例如,如果表包含'a',则尝试存储'a\0'会导致重复键错误。

BLOB

BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值