2010-05-18 10:01:12 阅读7 评论0 字号:大中小
MySQL 的数值数据范例可以大抵分别为两个种别,一个是整数,另一个是浮点数或小数。很多分歧的子范例对这些种别中的每一个都是可用的,每个子范例撑持分歧巨细的 数据,而且 MySQL 许可我们指定命值字段中的值是否有正负之分大概用零弥补。
表列出了各类数值范例以 及它们的许可规模和占用的内存空间。
在 MySQL 中撑持的 5 个首要整数范例是 TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT。这些范例在很大水平上是不异的,只有它们存储的值的巨细是不不异的。
MySQL 以一个可选的表现宽度指示器的情势对 SQL 尺度举行扩展,如许当从数据库检索一个值时,可以把这个值加长到指定的长度。比方,指定一个字段的范例为 INT(6),就可以包管所包罗数字少于 6 个的值从数据库中检索出来时可以或许主动地用空格添补。必要注重的是,利用一个宽度指示器不会影响字段的巨细和它可以存储的值的规模。
万一我们必要对一个字段存储一个凌驾允许规模的数字,MySQL 会按照许可规模最靠近它的一端截短后再举行存储。另有一个比力出格的处所是,MySQL 会在分歧划定的值插入表前主动点窜为 0。
UNSIGNED 润色符划定字段只保留正值。由于不必要保留数字的正、负标记,可以在储时节省一个“位”的空间。从而增大这个字段可以存储的值的规模。
ZEROFILL 润色符划定 0(不是空格)可以用来真补输出的值。利用这个润色符可以制止 MySQL 数据库存储负值。
MySQL 撑持的三个浮点范例是 FLOAT、DOUBLE 和 DECIMAL 范例。FLOAT 数值范例用于暗示单精度浮点数值,而 DOUBLE 数值范例用于暗示双精度浮点数值。
与整数一样,这些范 例也带有附加参数:一个表现宽度指示器和一个小数点指示器。好比语句 FLOAT(7,3) 划定表现的值不会跨越 7 位数字,小数点背面带有 3 位数字。
对付小数点背面的位数跨越许可规模的值,MySQL 会主动将它四舍五入为最靠近它的值,再插入它。
DECIMAL 数据范例用于精度要求很是高的计较中,这种范例许可指定命值的精度和计数方式作为选择参数。精度在这里指为这个值保留的有用数字的总个数,而计数方式暗示 小数点后数字的位数。好比语句 DECIMAL(7,3) 划定了存储的值不会跨越 7 位数字,而且小数点后不跨越 3 位。
纰漏 DECIMAL 数据范例的精度和计数方式润色符将会使 MySQL 数据库把全部标识为这个数据范例的字段精度设置为 10,计较方式设置为 0。
UNSIGNED 和 ZEROFILL 润色符也可以被 FLOAT、DOUBLE 和 DECIMAL 数据范例利用。而且结果与 INT 数据范例不异。
MySQL 供给了 8 个根基的字符串范例,可以存储的规模从简略的一个字符到庞大的文本块或二进制字符串数据。
CHAR 范例用于定长字符串,而且必需在圆括号内用一个巨细润色符来界说。这个巨细润色符的规模从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作弥补。
CHAR 范例可以利用 BINARY 润色符。当用于比力运算时,这个润色符使 CHAR 以二进制体例参于运算,而不因此传统的区分巨细写的体例。
CHAR 范例的一个变体是 VARCHAR 范例。它是一种可变长度的字符串范例,而且也必需带有一个规模在 0-255 之间的指示器。CHAR 和 VARCHGAR 分歧之处在于 MySQL 数据库处置这个指示器的体例:CHAR 把这个巨细视为值的巨细,不长度不敷的环境下就用空格补足。而 VARCHAR 范例把它视为{zd0}值而且只利用存储字符串现实必要的长度(增添一个分外字节来存储字符串自己的长度)来存储值。以是短于指示器长度的 VARCHAR 范例不会被空格弥补,但善于指示器的值仍旧会被截短。
由于 VARCHAR 范例可以按照现实内容动态转变存储值的长度,以是在不克不及确定字段必要几多字符时利用 VARCHAR 范例可以大大地节省磁盘空间、进步存储服从。
VARCHAR 范例在利用 BINARY 润色符时与 CHAR 范例xx不异。
对付字段长度要求跨越 255 个的环境下,MySQL 供给了 TEXT 和 BLOB 两种范例。按照存储数据的巨细,它们都有分歧的子范例。这些大型的数据用于存储文本块或图像、声音文件等二进制数据范例。
TEXT 和 BLOB 范例在分类和比力上存在区别。BLOB 范例区分巨细写,而 TEXT 不区分巨细写。巨细润色符不消于各类 BLOB 和 TEXT 子范例。比指定范例撑持的{zd0}规模大的值将被主动截短。
在处置 日期和时候范例的值时,MySQL 带有 5 个分歧的数据范例可供选择。它们可以被分成简略的日期、时候范例,和夹杂日期、时候范例。按照要求的精度,子范例在每个分范例中都可以利用,而且 MySQL 带有内置功效可以把多样化的输入格局变为一个尺度格局。
MySQL 用 DATE 和 TEAR 范例存储简略的日期值,利用 TIME 范例存储时候值。这些范例可以形貌为字符串或不带分开符的整数序列。若是形貌为字符串,DATE 范例的值应该利用连字号作为分开符分隔,而 TIME 范例的值应该利用冒号作为分开符分隔。
必要注重的是,没有冒号分开符的 TIME 范例值,将会被 MySQL 明白为连续的时候,而不是时候戳。
MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 TEAR 范例输入的两个数字举行{zd0}限度的通译。由于全部 TEAR 范例的值必需用 4 个数字存储。MySQL 试图将 2 个数字的年份转换为 4 个数字的值。把在 00-69 规模内的值转换到 2000-2069 规模内。把 70-99 规模内的值转换到 1970-1979 之内。若是 MySQL 主动转换后的值并不合适我们的必要,请输入 4 个数字暗示的年份。
除了日期和时候数据范例,MySQL 还撑持 DATEYIME 和 TIMESTAMP 这两种夹杂范例。它们可以把日期和时候作为单个的值举行存储。这两种范例凡是用于主动存储包罗当前日期和时候的时候戳,并可在必要实行大量数据库事件和必 要成立一个调试和检察用途的审计跟踪的应用法式中阐扬杰出感化。
若是我们对 TIMESTAMP 范例的字段没有明白赋值,或是被赋与了 null 值。MySQL 会主动利用体系当前的日期和时候来添补它。
MySQL 还撑持两种复合数据范例 ENUM 和 SET,它们扩展了 SQL 范例。固然这些范例在手艺上是字符串范例,可是可以被视为分歧的数据范例。一个 ENUM 范例只许可从一个调集中取得一个值;而 SET 范例许可从一个调集中取得肆意多个值。
ENUM 范例由于只许可在调集中取得一个值,有点近似于单选项。在处置彼此排拆的数据时轻易让人明白,好比人类的性别。ENUM 范例字段可以从调集中取得一个值或利用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。别的若是插入值的巨细写与调集中值的巨细写不立室,MySQL 会主动利用插入值的巨细写转换成与调集中巨细写同等的值。
ENUM 范例在体系内部可以存储为数字,而且从 1 起头用数字做索引。一个 ENUM 范例最多可以包罗 65536 个元素,此中一个元素被 MySQL 保存,用来存储错误信息,这个错误值用索引 0 大概一个空字符串暗示。
MySQL 以为 ENUM 范例调集中呈现的值是正当输入,除此之外别的任何输入都将失败。这申明经由过程搜刮包罗空字符串或对应数字索引为 0 的行就可以很轻易地找到错误记实的位置。
SET 范例与 ENUM 范例相似但不不异。SET 范例可以从预界说的调集中取得肆意数目的值。而且与 ENUM 范例不异的是任何试图在 SET 范例字段中插入非预界说的值城市使 MySQL 插入一个空字符串。若是插入一个即有正当的元素又有不法的元素的记实,MySQL 将会保存正当的元素,撤除不法的元素。
一个 SET 范例最多可以包罗 64 项元素。在 SET 元素中值被存储为一个分手的“位”序列,这些“位”暗示与它相对应的元素。“位”是建立有序元素调集的一种简略而有用的体例。而且它还去除了反复的元素, 以是 SET 范例中不成能包罗两个不异的元素。
但愿从 SET 范例字段中找出不法的记实只需查找包罗空字符串或二进制值为 0 的行。
M is the maximum number of digits (the precision). It has a range of 1 to 65. (Older versions of MySQL allowed a range of 1 to 254.)
D is the number of digits to the right of the decimal point (the scale). It has a range of 0 to 30 and must be no larger than M.
可见M代表maximum,精度,即最多,
D代表decimal,小数部分位数