zoukankan      html  css  js  c++  java
  • MySQL的数据类型(一)

      每一个常量、变量和参数都有数据类型、它用来指定一定的存储格式、约束和有效范围。MySQL提供了多种数据类型、主要有数值型、字符串类型、日期和时间类型。不同的MySQL版本支持的数据类型可能会稍有不同。

      数值类型:
      MySQL支持所有标准SQL 中的数值类型、其中包括了严格数值类型、近似数值数据类型、并在此基础上做了一些扩展、增加了三种不同长度的整型。

      在整数类型中、按照取值范围和存储方式不同、分为tinyint、smallint、mediumint、int和bigint这五种类型,如果超出类型范围的操作,会发生“Out of range” 错误提示。为了避免此类问题的发生,在选择数据类型的时候要根据应用的实际情况确定其取值范围,最后根据确定的结果去选择数据类型。

      对于整型数据,MySQL还支持在类型名称后面的小括号能指定显示宽度,例如 int(5) 表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显示指定宽度则默认为int(11)。一般配合zerofill使用,zerofill就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。

      所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,他的取值范围时正常值得下限取0,上限取原值的2倍,例如tinyint有符号范围是-128~+127,而无符号范围是0~255。如果一个列指定为zreofill,则MySQL自动为该列添加UNSIGNED属性。

      整数类型还有一个属性,AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可以使用此属性,这个属性只能用于整数。ATUO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列中当前最大值大1的值。一个表中最多只能有一个AUTO_INCREMENT列。对于任何想要使用AUTO_INCREMENT的列,应该定义为NOT NULL,并定义为PRIMARY KEY 或者为 UNIQUE键。

      小数类型,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种表示。定点数在mysql中以字符串的形式存放,比浮点数更准确,适合用来表示货币等精度高的数据。

      浮点数和定点数都可以在类型名称后加(M,D)的方式来表示“(M,D)”表示该值一共显示M位数字(整数位+小数位)其中D位位于小数点后面,M和D又称为精度和标度。需要注意的是浮点数后面跟“(M,D)”的用法是非标准用法,如果要用于数据库的迁移,则最好不要这么使用。float和double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统来决定)来显示,而decimal在不指定精度时,默认的整数位为10,默认小数位为0。

      浮点数如果不写精度和标度,则会按照实际精度值来显示,如果有精度和标度,则会自动将四舍五入的结果插入,系统不会报错;定点数如果不写精度和标度,则按照默认值decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统则会报错。

      BIT(位)类型,用于存放字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写则默认为1位。对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()

    (显示为二进制格式)或者hex()(显示为十六进制格式)函数来进行读取。

      日期时间类型:

      MySQL中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,这些数据类型主要区别如下:

      1.如果用来表示年月日,通常使用DATE来表示。字节:4,最小值:1000-01-01,最大值:9999-12-31

      2.如果用来表示年月日时分秒,通常使用DATETIME来表示。字节:8,最小值:1000-01-01 00:00:00,最大值:9999-12-31 23:59:59

      3.如果用来表示时分秒,通常使用TIME来表示。字节:4,最小值:-838:59:59,最大值:838:59:59

      4.如果需要经常插入或者更新时间为当前系统时间,则通常是用TIMESTAMP来表示。TIMESTAMP值返回后显示为“YYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定位19个字符,如果想要获得数字值,应在TIMESTAMP列添加“+0”。字节:4,最小值:19700101080001,最大值:2038年的某个时刻

      5.如果中表示年份,可以使用YEAR来表示,它比DATE占用更少的空间,YEAR有2位或4位格式的年,默认为4位格式。在4位格式中,允许的值:1901-2155和0000.在2位中,允许的值:70-69,表示1970-2069年。MySQL以YYYY格式显示年YEAR值(从5.5.27开始,2位格式的year已不被支持)。字节:1,最小值:1901,最大值:2155

      每个日期时间类型都有一个有效值范围,如果超出这个范围,在默认的SQLMode下,系统会进行错误提示,并将以零值来进行存储。

      TIMESTAMP还有一个重要特点,就是和时区相关。当插入日期时,会先转换为本地时区后存放;而从数据库取出时,也同样需要将日期转换为本地时区后显示。这样,两个不同时区的用户看到的同一个日期可能不一样。

  • 相关阅读:
    BZOJ2219数论之神——BSGS+中国剩余定理+原根与指标+欧拉定理+exgcd
    Luogu 3690 Link Cut Tree
    CF1009F Dominant Indices
    CF600E Lomsat gelral
    bzoj 4303 数列
    CF1114F Please, another Queries on Array?
    CF1114B Yet Another Array Partitioning Task
    bzoj 1858 序列操作
    bzoj 4852 炸弹攻击
    bzoj 3564 信号增幅仪
  • 原文地址:https://www.cnblogs.com/EveningWind/p/9311110.html
Copyright © 2011-2022 走看看