zoukankan      html  css  js  c++  java
  • MySQL基本数据类型

    FloatDouble

      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 '。 插入时'a'变为'a'。两个插入的值均保持不变以进行检索。

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

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

    BLOB

      BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。同样TEXT也有四种类型: TINYTEXT,TEXT, MEDIUMTEXT,和LONGTEXT。这些对应于四种BLOB类型,并且具有相同的最大长度和存储要求。

      BLOB值被视为二进制字符串(字节字符串)。它们具有binary 字符集和排序规则,并且比较和排序基于列值中字节的数字值。 TEXT值被视为非二进制字符串(字符字符串)。它们具有 binary以外的字符集,并且根据字符集的排序规则对值进行排序和比较。

      在大多数情况下可以将BLOB列看做VARBINARY,相似的,可以将TEXT列视为VARCHAR。但是BLOB、TEXT与VARBINARY、VARCHAR的不同在于:

    • 对于BLOB和TEXT的索引列,必须指定索引前缀长度。但对于CHAR和VARCHAR,前缀长度是可选的。

    • BLOB和TEXT列不能有DEFAULT值。

      MySQL Connector / ODBC将BLOB值定义为 LONGVARBINARY,将TEXT 值定义为LONGVARCHAR。

      由于BLOBandTEXT 值可能非常长,因此在使用它们时可能会遇到一些限制:

      使用临时表处理的查询结果中的 实例BLOB或 TEXT列会导致服务器在磁盘而不是内存中使用表,因为 MEMORY存储引擎不支持这些数据类型。使用磁盘会导致性能下降,因此仅在确实需要时在查询结果中包含 BLOB或TEXT列。例如,避免使用 SELECT *选择所有列的。

    SET和ENUM

      ENUM 是一个字符串对象,值为表创建时列规定中枚举的一列值。

      SET 是一个字符串的对象,可以有零或多个值,SET 列最多可以有 64 个成员,值为表创建时规定的一列值。指定包括多个 SET 成员的 SET 列值时,各成员之间用逗号,隔开。如果插入 SET 字段中的列值有重复,则 MySQL 自动删除重复的值;插入 SET 字段的值的顺序并不重要,MySQL 会在存入数据库时,按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,给出警告。

      与 ENUM 类型相同,SET 值在内部用整数表示,列表中每个值都有一个索引编号。当创建表时,SET 成员值的尾部空格将自动删除。

      但与 ENUM 类型不同的是,ENUM 类型的字段只能从定义的列值中选择一个值插入,而 SET 类型的列可从定义的列值中选择多个字符的联合。

     

  • 相关阅读:
    jquery toggle(listenerOdd, listenerEven)
    struts quick start
    hdu 1518 Square (dfs)
    hdu 2544 最短路 (最短路径)
    hdu 1754 I Hate It (线段树)
    hdu 1856 More is better (并查集)
    hdu 1358 Period (KMP)
    hdu 2616 Kill the monster (DFS)
    hdu 2579 Dating with girls(2) (bfs)
    zoj 2110 Tempter of the Bone (dfs)
  • 原文地址:https://www.cnblogs.com/Sherlockmmc/p/14284687.html
Copyright © 2011-2022 走看看