Mysql:语法:数据类型细节

数字

  • 扩展:显示宽度,仅仅是告诉mysql当指定了显示宽度的数字字符个数在少于指定的宽度时 是否 以空白填充前面。并不影响其 存储范围、大于指定宽度数字的显示。
  • 与显示宽度配套的扩展:zerofill,是否以”0“代替空格” “去填充。这个0 不影响数字参与的表达式计算;不影响普通的查询,但可能影响复杂的查询中用到的临时表数据,mysql总是假定你的宽度设置是合适数字的长度的
  • unsigned:禁止存储负数。对于整数会影响到数字的范围大小。对于其他数字仅仅阻止负数,不影响范围
  • auto_increment:整数和浮点数均可具有该属性。当对该列赋值null或0时,该列会在最大值的基础上 +1
  • ansi标准中的float(n):此处的n只是指明precision,注意不是指明存储范围!mysql支持这一语法,但此处的n仅仅决定了需要使用的存储空间:(0-23)为4字节单精度浮点型,(24-53)为8字节双精度浮点型。ansi标准的double(n)与之类似
  • mysql扩展了该类型定义:float(m,d)、real(m,d)、double precision(m,d)  m只整个数字的位数——相当于精度;d指小数点后的数字个数——相当于scale。mysql总是四舍五入到指定的d
  • 默认情况下double=real=ansi的double precision类型。如果开启了real_as_float,real就是float类型了
  • bit(m)本质上就是一个bigint,但他的输入、显示形式不同
  • 当一个更大范围的数字存储到较小范围的数字时会发上什么?严格模式下:错误!非严格模式,截断到合适的值存入!

日期时间类型

  • allow_invalid_dates 可以存储可能错误的日期如‘2009-02-30’
  • no_zero_in_datel可以禁止mysql存储”0“月、”0“日期,如”2009-03-00“
  • mysql5.1.18之前,data 和 dateitme进行比较时,将datetime日期提取出来,和date进行字符串比较。之后,将date + '00:00:00变换为datetime,进行值比较
  • no_zero_in_date被禁止的话,可以使用‘0000-00-00’表示虚拟的日期,主要是为了方便
  • 尽管mysql可以以多种格式解析日期,但必须是”yyyy-mm-dd“的顺序
  • 在数字环境中,日期时间自动以数字值参与计算;反之一样
  • ”0“日期时间是十分特殊的东西。你可以显示的引用、查看、并当作‘0’或0使用。myodbc驱动在2.50.12以上会自动转换为null值
  • 你可以通过非常非常非常灵活的格式指定日期时间值
  1. 分隔符随意
  2. 长短格式均可
  3. 没有分隔符的数字串也是可以的。这依赖于其位数和数字范围的有效性
  4. 字符串和数字串均可
  5. 函数的计算结果
  6. 在有分隔符的情况下:每个部分的0是可以省略的
  7. timestamp类型总是以utc日期时间存储,但总是以当前时区显示。mysql在内部处理上有一个转换。
在create table时,第一个timestamp列可以有几种创建方式:
timestamp默认为not null default current_timestamp on update current_timestamp
如果仅指定了default 而没有on update,则当前日期时间作为其默认值,但不再自动更新
如果没有default 而仅指定有on update,则当前日期时间作为0,可自动更新
如果指定了其他default值,指定了on update current_timestamp,则初始化为指定值,自动更新
如果指定了其他default值,没有指定on update ,则初始化为指定值,不再自动更新
对于不是第一个timestamp列,如果想让其自动初始化或自动更新为当前日期时间,就必须为第一个timestamp类指定一个其他default值!!
timestamp 不能保存null值,除非你显示指定null列约束后 指定default null

文本类型

  • char 和varchar 基本上是类似的:区别在于二者的最大存储长度、存储是否尾随空格、获取是否截掉空格
  • 当指定的字符串范围超过最大字符数时,严格sql模式下,如果被截取掉的不是空格,错误!非严格sql模式下,字符串截断到适合的长度
  • char和varchar总进行字符串比较是 永远不考虑 尾随空格
  • binary 和 varbinary存储的仅仅是没有character set 的字符的数字形式二进制字符串(不是bit串),没有字符集转换的信息。注意这和 char varchar类型的binary属性不同,后者是使用character set 二进制排序规则的代名词
  • binary右填充‘0x00’至指定的长度,但获取是不会截断‘0x00’
  • enum类型 是一个 value:index 对的有限列表,特殊的null:null,‘’:0。其他为 val1:1、val2:2 .......
  • 当enum用在数字环境时,它自动以其index值参与计算
原文地址:https://www.cnblogs.com/jinzhenshui/p/1496003.html