Mysql:语法:数据类型、文字常量
数字类型:对于整数允许进行显示宽度的设定,这个设定并不影响其值的实际范围;对于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'
文本类型
- 通常文本类型有以下通用特性
- 文本类型的长度是字符长度,不是字节长度
- 文本类型具有[character set|charset]字符集属性、[collate]排序规则属性、[binary]属性——该属性会改变文本类型的数据类型
- ascii 是 character set latin1的简称
- unicode 是 character set ucs2的简称
- 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。严格模式下会出现错误;非严格模式下:
- 数字为0,当数字类型为auto_increment时,为下一个值
- timestamp 为当前的日期时间
- 其他日期时间类型为适当的”零“值
- enum型为第一个值
- 其他字符类型为空串 ''
字符常量:[_字符集名称]'字符序列....' [排序规则名称] --是可以识别"\"转义字符的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()函数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)