现在的位置: 首页 > 综合 > 正文

Mysql:语法:数据类型、文字常量

2013年06月18日 ⁄ 综合 ⁄ 共 3351字 ⁄ 字号 评论关闭

数字类型:对于整数允许进行显示宽度的设定,这个设定并不影响其值的实际范围;对于bit数、浮点、定点小数,m是指其有效数字位数,影响值的范围。

  • serial:bigint unsigned not null auto_increment unique
  • serial default value: not null auto_increment unique
  • bit[(m:=1:64)]  m默认为1
  • tinyint[(m)] [unsigned] [zerofill]
  • {bool|boolean}:tinyint[1]  --实际上 true=1 false=0,在存储时,任何非0的值都是true(1)
  • smallint[(m)] [unsigned] [zerofill]
  • mediumint[(m)] [unsigned] [zerofill]
  • {int|integer}[(m)] [unsigned] [zerofill]
  • bigint[(m)] [unsigned] [zerofill]
  • float[(m,d)] [unsigned] [zerofill]:--缺省依赖于硬件
  • float[(p)]:--为了odbc而提工的类型
  • {double [precision]}[(m,d)] [unsigned] [zerofill]:--缺省依赖于硬件
  • {dec|decimal|numeric|fixed}[(m:=10:65,d:0:30)] [unsigned] [zerofill] m默认为10,d默认为0

 

日期时间类型

  • date :'1000-01-01':'9999-12-31'  显示: 'YYYY-MM-DD' 输入:{文字常量|数字}
  • datetime :'1000-01-01 00:00:00':'9999-12-31 23:59:59'  显示: 'YYYY-MM-DD HH:MM:SS' 输入:{文字常量|数字}
  • timestamp :'1970-01-01 00:00:01'UTC:'2038-01-09 03:14:07'UTC  显示: 'YYYY-MM-DD HH:MM:SS' 输入:{文字常量|数字}

    • timestamp存储的值是自'1970-01-01 00:00:00'依赖经过的秒数,但它却无法表示'1970-01-01 00:00:00',因为 他的值为0时有其他的含义表示'0000-00-00 00:00:00'
    • timestamp的主要作用就是自动更新现有记录的insert或update的时间:表里第一个timestamp列会自动在这两种操作发生时更新,或者 为他赋值null时。当然你也可以在显示给他符其他值!
    • 通常timestamp列总是作为19位的字符串,你可以通过“+0”让他隐式转换为bigint值
  • time '-838:59:59':'838:59:59' 显示:'HH:MM:SS' 输入:{文字常量|数字}
  • year[(4|2)]:'1901':'2155'   默认为4位长度,2位长度的范围为'1970:2069'

 

文本类型

  1. 通常文本类型有以下通用特性
  2. 文本类型的长度是字符长度,不是字节长度
  3. 文本类型具有[character set|charset]字符集属性、[collate]排序规则属性、[binary]属性——该属性会改变文本类型的数据类型
  4. ascii 是 character set latin1的简称
  5. unicode 是 character set ucs2的简称
  6. binary 是指定character set 的二进制排序规则,这将是字符串的排序、比较依据字符集的数字值进行
  • [national] {character|char}[(m:1:255)] [character set cs_name] [collate c_name]  --mysql 允许m=0的char,仅仅是考虑兼容部分应用程序而已,他的值只能是null或‘’。char的尾随空格是否删除是受pad_char_to_full_length控制的
  • nchar 是 national char的简称,使用utf8字符集
  • [national] {character varying|varchar} [(m:1:65535)] [character set cs_name] [collate c_name]  --其最大长度受行大小和其他列、字符集影响的。每个varchar列还额外占用1-2个字节寸草其实际长度
  • nvchar 是 national varchar的简称,使用utf8字符集
  • binary(m)  --和char类似,只是其存储的是二进制的串,单位为字节
  • varbinary(m)  --和char类似,只是其存储的是二进制的串,单位为字节
  • tinyblob  --最大存储2^8-1个bytes,另外1个字节的值存储实际长度
  • tinytext [character set cs_name] [collate c_name]  --最大存储2^8-1个char,另外1个字节的值存储实际长度
  • blob  --最大存储2^16-1个bytes,另外2个字节的值存储实际长度
  • text [character set cs_name] [collate c_name]  --最大存储2^16-1个char,另外2个字节的值存储实际长度
  • mediumblob  --最大存储2^24-1个bytes,另外3个字节的值存储实际长度
  • mediumtext [character set cs_name] [collate c_name]  --最大存储2^24-1个char,另外4个字节的值存储实际长度
  • longblob  --最大存储2^32-1个bytes,另外3个字节的值存储实际长度
  • longtext [character set cs_name] [collate c_name]  --最大存储2^32-1个char,另外4个字节的值存储实际长度
  • enum ('v1','v2',.....)  [character set cs_name] [collate c_name]  --最多65535个不同的值,enum字符串对象只能具有{列表中的|null|''}中的1个值,其内部已整数表示
  • set('v1','v2',.....)  [character set cs_name] [collate c_name]  --最多64个不同的值,enum字符串对象只能具有列表中的的任意个值,其内部已整数表示

 

数据类型的默认值

  • 表列可以通过default关键字为列指定默认值
  • 默认值鼻必须是常量,例外的是timestamp列:可以指定current_timestamp
  • 如果列可以为null 可以显示指定 default null
  • 如果列不可以为null,在insert、replace、update等操作里。mysql看是否启用strict sql mode。严格模式下会出现错误;非严格模式下:
  1. 数字为0,当数字类型为auto_increment时,为下一个值
  2. timestamp 为当前的日期时间
  3. 其他日期时间类型为适当的”零“值
  4. enum型为第一个值
  5. 其他字符类型为空串 ''

 

 

 

 

字符常量:[_字符集名称]'字符序列....'   [排序规则名称]  --是可以识别"\"转义字符的c风格字符串

  • 双引号字符串表示风格,不推荐。
  • 转义字符是大小写敏感的。不是转义字符将不做转义
  • N'字符序列' = n'字符序列' = _utf8'字符序列'

 

数字常量:还用说吗!!

 

十六进制文字常量:

  • {X|x}'{[0-9a-fA-F]}*'   --标准sql风格
  • 0x{[0-9a-fA-F]}*  --odbc标准风格
  • 注意:十六进制字符常量在数字环境会转换为bigint型,在文本环境会转换为character字符串

 

布尔型:true、false  --不区分大小写的

 

二进制文字常量:

  • b'{[01]}*'  --标准sql风格
  • 0b{[01]}*  --odbc风格
  • 注意:二进制文字常量总是作为二进制字符串;要想当作数字使用,必须显式的cast

 

NULL:未知或没有数据的意思,不等于0 或空字符串 或 ascii的nul(ascii值为0)

  • 不区分大小写
  • 注意可以使用"\N"来表示

 

 

相关知识:

  • ansi_quotes设置
  • 字符集
  • 排序规则
  • hex()、bin()、oct()、cast()函数

抱歉!评论已关闭.