您现于de位置乃:亚博 > Mysql

亚博 2017-04-19 Mysql 847

Mysql支持de数据类型(总结)

1.数值类型

Mysql支持所有标准SQL中de数值类型 其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC) 以及近似数值数据类型(FLOAT,REAL,DOUBLE PRESISION),并于此基础上进行扩展.

扩展后增加了TINYINT,MEDIUMINT,BIGINT这3种长度不同de整形 并增加了BIT类型 用来存放位数据.


整数类型        字节       范围(有符号)      范围(无符号)          用途 

TINYINT        1字节        (-128 127)          (0 255)            小整数值 

SMALLINT       2字节     (-32 768 32 767)       (0 65 535)         大整数值 

MEDIUMINT      3字节    (-8 388 608 8 388 607) (0 16 777 215)      大整数值 

INT或INTEGER   4字节   (-2 147 483 648 2 147 483 647) (0 4 294 967 295) 大整数值 

BIGINT         8字节   (-9 233 372 036 854 775 808 9 223 372 036 854 775 807) (0 18 446 744 073 709 551 615) 极大整数值 

FLOAT          4字节   (-3.402 823 466 E+38 1.175 494 351 E-38) 0 (1.175 494 351 E-38 3.402 823 466 351 E+38) 0 (1.175 494 351 E-38 3.402 823 466 E+38) 单精度浮点数值 

DOUBLE         8字节 (1.797 693 134 862 315 7 E+308 2.225 073 858 507 201 4 E-308) 0 (2.225 073 858 507 201 4 E-308 1.797 693 134 862 315 7 E+308) 0 (2.225 073 858 507 201 4 E-308 1.797 693 134 862 315 7 E+308) 双精度浮点数值 

DECIMAL 对DECIMAL(M,D) 如果M>D 为M+2否则为D+2 依赖于M和Dde值 依赖于M和Dde值 小数值


INT 类型:

  于 MySQL 中支持de 5 个主要整数类型乃 TINYINT SMALLINT MEDIUMINT INT 和 BIGINT.这些类型于很大程度上乃相同de 只有它们存储de值de大小乃不相同de.

MySQL 以1个可选de显示宽度指示器de形式对 SQL 标准进行扩展 这样当从数据库检索1个值时 可以把这个值加长到指定de长度.例如 指定1个字段de类型为 INT(6)

就可以保证所包含数字少于 6 个de值从数据库中检索出来时能够自动地用空格填充.需要注意de乃 使用1个宽度指示器不会影响字段de大小和它可以存储de值de范围.

万1我们需要对1个字段存储1个超出许可范围de数字 MySQL 会根据允许范围最接近它de1端截短后再进行存储.还有1个比较特别de地方乃

MySQL 会于不合规定de值插入表前自动修改为 0.


UNSIGNED 修饰符规定字段只保存正值.因为不需要保存数字de正 负符号 可以于储时节约1个"位"de空间.从而增大这个字段可以存储de值de范围.

ZEROFILL 修饰符规定 0(不乃空格)可以用来真补输出de值.使用这个修饰符可以阻止 MySQL 数据库存储负值.


FLOAT DOUBLE 和 DECIMAL 类型

  MySQL 支持de3个浮点类型乃 FLOAT DOUBLE 和 DECIMAL 类型.FLOAT 数值类型用于表示单精度浮点数值 而 DOUBLE 数值类型用于表示双精度浮点数值.

与整数1样 这些类型也带有附加参数:1个显示宽度指示器和1个小数点指示器.比如语句 FLOAT(7,3) 规定显示de值不会超过 7 位数字 小数点后面带有 3 位数字.


对于小数点后面de位数超过允许范围de值 MySQL 会自动将它4舍5入为最接近它de值 再插入它.

DECIMAL 数据类型用于精度要求非常高de计算中 这种类型允许指定数值de精度和计数方法作为选择参数.精度于这里指为这个值保存de有效数字de总个数

而计数方法表示小数点后数字de位数.比如语句 DECIMAL(7,3) 规定了存储de值不会超过 7 位数字 并且小数点后不超过 3 位.


忽略 DECIMAL 数据类型de精度和计数方法修饰符将会使 MySQL 数据库把所有标识为这个数据类型de字段精度设置为 10 计算方法设置为 0.

UNSIGNED 和 ZEROFILL 修饰符也可以被 FLOAT DOUBLE 和 DECIMAL 数据类型使用.并且效果与 INT 数据类型相同.


2.字符串类型

 MySQL 提供了8个基本de字符串类型,分别:CHAR VARCHAR BINARY VARBINARY BLOB TEXT ENUM 各SET等多种字符串类型.

可以存储de范围从简单de1个字符到巨大de文本块或2进制字符串数据.


  字符串类型     字节大小         描述及存储需求

    CHAR         0-255字节          定长字符串 

    VARCHAR      0-255字节          变长字符串 

    TINYBLOB     0-255字节        不超过 255 个字符de2进制字符串 

    TINYTEXT     0-255字节        短文本字符串 

    BLOB         0-65535字节      2进制形式de长文本数据 

    TEXT         0-65535字节      长文本数据 

    MEDIUMBLOB   0-16 777 215字节 2进制形式de中等长度文本数据 

    MEDIUMTEXT   0-16 777 215字节 中等长度文本数据 

    LOGNGBLOB    0-4 294 967 295字节 2进制形式de极大文本数据 

    LONGTEXT     0-4 294 967 295字节 极大文本数据

    VARBINARY(M)                   允许长度0-M个字节de定长字节符串 值de长度+1个字节

    BINARY(M)    M                 允许长度0-M个字节de定长字节符串


CHAR 和 VARCHAR 类型

  CHAR 类型用于定长字符串 并且必须于圆括号内用1个大小修饰符来定义.这个大小修饰符de范围从 0-255.比指定长度大de值将被截短 而比指定长度小de值将会用空格作填补.

CHAR 类型可以使用 BINARY 修饰符.当用于比较运算时 这个修饰符使 CHAR 以2进制方式参于运算 而不乃以传统de区分大小写de方式.

   CHAR 类型de1个变体乃 VARCHAR 类型.它乃1种可变长度de字符串类型 并且也必须带有1个范围于 0-255 之间de指示器.CHAR 和 VARCHGAR 不同之处于于 MYSQL 数据库处理

这个指示器de方式:CHAR 把这个大小视为值de大小 不长度不足de情况下就用空格补足.而 VARCHAR 类型把它视为好的值并且只使用存储字符串实际需要de长度

(增加1个额外字节来存储字符串本身de长度)来存储值.所以短于指示器长度de VARCHAR 类型不会被空格填补 但长于指示器de值仍然会被截短.

因为 VARCHAR 类型可以根据实际内容动态改变存储值de长度 所以于不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间 提高存储效率.

VARCHAR 类型于使用 BINARY 修饰符时与 CHAR 类型完全相同.


TEXT 和 BLOB 类型

  对于字段长度要求超过 255 个de情况下 MySQL 提供了 TEXT 和 BLOB 两种类型.根据存储数据de大小 它们都有不同de子类型.这些大型de数据用于存储文本块或图像

声音文件等2进制数据类型.

TEXT 和 BLOB 类型于分类和比较上存于区别.BLOB 类型区分大小写 而 TEXT 不区分大小写.大小修饰符不用于各种 BLOB 和 TEXT 子类型.

比指定类型支持de好的范围大de值将被自动截短.


3.日期和时间类型

 于处理日期和时间类型de值时 MySQL 带有 5 个不同de数据类型可供选择.它们可以被分成简单de日期 时间类型 和混合日期 时间类型.

根据要求de精度 子类型于每个分类型中都可以使用 并且 MySQL 带有内置功能可以把多样化de输入格式变为1个标准格式.


 类型     大小(字节)     范围               格式          用途 

 DATE       4        1000-01-01/9999-12-31 YYYY-MM-DD    日期值 

 TIME       3        '-838:59:59'/'838:59:59' HH:MM:SS    时间值或持续时间 

 YEAR       1         1901/2155               YYYY       年份值 

 DATETIME   8       1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 

 TIMESTAMP  4       1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值 时间戳


DATE TIME 和 TEAR 类型

  MySQL 用 DATE 和 TEAR 类型存储简单de日期值 使用 TIME 类型存储时间值.这些类型可以描述为字符串或不带分隔符de整数序列.如果描述为字符串,

DATE 类型de值应该使用连字号作为分隔符分开 而 TIME 类型de值应该使用冒号作为分隔符分开.

  需要注意de乃 没有冒号分隔符de TIME 类型值 将会被 MySQL 理解为持续de时间 而不乃时间戳.


MySQL 还对日期de年份中de两个数字de值 或乃 SQL 语句中为 TEAR 类型输入de两个数字进行好的限度de通译.因为所有 TEAR 类型de值必须用 4 个数字存储.

MySQL 试图将 2 个数字de年份转换为 4 个数字de值.把于 00-69 范围内de值转换到 2000-2069 范围内.把 70-99 范围内de值转换到 1970-1979 之内.

如果 MySQL 自动转换后de值并不符合我们de需要 请输入 4 个数字表示de年份.

DATEYIME 和 TIMESTAMP 类型

  除了日期和时间数据类型 MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种混合类型.它们可以把日期和时间作为单个de值进行存储.

这两种类型通常用于自动存储包含当前日期和时间de时间戳 并可于需要执行大量数据库事务和需要建立1个调试和审查用途de审计跟踪de应用程序中发挥良好作用.

如果我们对 TIMESTAMP 类型de字段没有明确赋值 或乃被赋与了 null 值.MySQL 会自动使用系统当前de日期和时间来填充它.


复合类型

  MySQL 还支持两种复合数据类型 ENUM 和 SET 它们扩展了 SQL 规范.虽然这些类型于技术上乃字符串类型 但乃可以被视为不同de数据类型.

1个 ENUM 类型只允许从1个集合中取得1个值;而 SET 类型允许从1个集合中取得任意多个值.


ENUM 类型

  ENUM 类型因为只允许于集合中取得1个值 有点类似于单选项.于处理相互排拆de数据时容易让人理解 比如人类de性别.ENUM 类型字段可以从集合中取得1个值或使用 null 值

除此之外de输入将会使 MySQL 于这个字段中插入1个空字符串.另外如果插入值de大小写与集合中值de大小写不匹配 MySQL 会自动使用插入值de大小写转换成与集合中大小写1致de值.

   ENUM 类型于系统内部可以存储为数字 并且从 1 开始用数字做索引.1个 ENUM 类型最多可以包含 65536 个块素 其中1个块素被 MySQL 保留 用来存储错误信息

这个错误值用索引 0 或者1个空字符串表示.

MySQL 认为 ENUM 类型集合中出现de值乃合法输入 除此之外其它任何输入都将失败.这说明通过搜索包含空字符串或对应数字索引为 0 de行就可以很容易地找到错误记录de位置.


SET 类型

 SET 类型与 ENUM 类型相似但不相同.SET 类型可以从预定义de集合中取得任意数量de值.并且与 ENUM 类型相同de乃任何试图于 SET 类型字段中插入非预定义de值都会使 

MySQL 插入1个空字符串.如果插入1个即有合法de块素又有非法de块素de记录 MySQL 将会保留合法de块素 除去非法de块素.


 1个 SET 类型最多可以包含 64 项块素.于 SET 块素中值被存储为1个分离de"位"序列 这些"位"表示与它相对应de块素."位"乃创建有序块素集合de1种简单而有效de方式.

并且它还去除了重复de块素 所以 SET 类型中不可能包含两个相同de块素.

希望从 SET 类型字段中找出非法de记录只需查找包含空字符串或2进制值为 0 de行.


通过对每种数据类型de用途 物理存储 表示范围等有1个概要de了解.这样于面对具体应用时 就可以根据相应de特来来选择合适de数据类型 使得我们能够争取于满足应用de基础上

用较小de存储代价换来较高de数据库性能.


评论