MySQL支持的数据类型在几类:数值类型,日期和时间类型和字符串(字符)类型。
注意:
在定义字段是我们经常使用 num int(10) unsigned 这种写法,其中的 int(10) 并不是表示该字段会存储10个长度的数字。
int(M) 表示的是数字显示的格式,并且只能在字段属性设置了zerofill时才有效。
eg:
tinyint(4) -- 实际存储值为2, 如果没有指定zerofill,查询得到的结果就是 2, 如果指定了zerofill,则查询结果就是 0002,左边使用0来进行填充;
zerofill属性:
如果字段指定了zerofill属性,mysql会自动为字段加上UNSIGNED 属性。
当涉及列表达式或UNION查询中时,ZEROFILL属性将被忽略
浮点型:
Float(M,D):M为数字的位数,包含了整数部分和小数部分;D为小数部分,【D <= M-2】; 如果等于则整数部分为0,最大的值也就是0.99
eg:
Float(2,1) -- 表示一位整数和一位小数,eg:1.1
Float(1,2) -- 语法错误,总共才1位 怎么可能有2位小数
关于默认值:
默认值必须是一个常亮,不能函数或者表达式。例外:TIMESTAMP的默认值可以使用CURRENT_TIMESTAMP
BLOB and TEXT 不能设置默认值
如果一个列不明确的指出默认是是多少的情况下:
如果数据库为strict mode 模式下,则会报错
如果模式不处于strict mode模式,系统会根据类型来确认使用何种默认值
表示时间值的日期和时间类型是日期时间(DATATIME)、日期(DATA)、时间戳(TIMESTAMP)、时间(TIME)和年份(YEAR)。
DATATIME范围: '1000-01-01 00:00:00'
to '9999-12-31 23:59:59'
.
DATA范围:'1000-01-01'
to '9999-12-31'
TIMESTAMP范围:'1970-01-01 00:00:01'
UTC to '2038-01-19 03:14:07'
TIME范围:'-838:59:59'
to '838:59:59'
YEAR范围:year(4) --- 1901~2155; year(2) --- 00~99
TIMESTAMP: 时间戳列显示在相同的格式为DATETIME列。换句话说,显示宽度固定为19个字符,格式是'YYYY-MM-DD HH:MM:SS'。
TIMESTAMP数据类型提供自动初始化和更新。但是只能有一列默认值和更新是 指定为CURRENT_TIMESTAMP
1、自动初始化和自动更新 eg : ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
2、只有自动初始化; eg:ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
3、只有自动更新; eg:ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
4、都没有; eg:ts TIMESTAMP DEFAULT 0
CREATE TABLE sizes ( name ENUM('small', 'medium', 'large'));
numbers ENUM('0','1','2')
mysql>INSERT INTO t (numbers) VALUES(2),('2'),('3');
mysql>SELECT * FROM t;
+---------+| numbers |+---------+| 1 || 2 || 2 |+---------+
1 CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));2 3 INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');