1 整型
2 定点型 decimal, numeric, 在mysql中以binary形式储存,用于精确存储数值。
decimal(m,n): m为最大有效位数(不超过65,默认为10),用于控制数值的精度,n为最大小数位数
3 浮点型 float(4 bytes), double(8bytes) , 用于近似存储数值。
float(m,n): m为最大有效位数(0-23), n为最大小数位数
double(m, n):m为最大有效位数(24-53), n为最大小数位数
但是这里的m并不能用于控制精度,而是用于确定存储空间的大小(是float还是double).
为了保持最大的可移植性,一般最好不要对m和n进行限制。
4 日期时间类型
date: mysql默认以'YYYY-MM-DD'格式展现date数据, 有效范围是'1000-01-01'
到 '9999-12-31'
datetime: 默认展现格式 'YYYY-MM-DD HH:MM:SS[.fraction]'
, 有效范围'1000-01-01 00:00:00.000000'
到 '9999-12-31 23:59:59.999999',最高时间精度可以到微秒(6位小数)
timestamp: 有效范围'1970-01-01 00:00:01.000000'
到'2038-01-19 03:14:07.999999', timestamp会将当地时间转化成UTC进行存储,然后再转化成当地时间进行展示,默认当前时区为服务器所在时区。
注:
1. mysql会将无效的date, datetime, timestamp 所有位都置零进行保存。
2. 2位年份转化为4位的规则:00-69==》2000-2069;70-99==》1970-1999;
3. 可以为timestamp和datetime赋值当前时间的变量或者函数CURRENT_TIMESTAMP()
, NOW()
, LOCALTIME
, LOCALTIME()
, LOCALTIMESTAMP
, 和 LOCALTIMESTAMP(),这些量都具有相同的含义。
time: 默认展现为'HH:MM:SS[.fraction]'或者
'HHH:MM:SS[.fraction]'格式, 有效范围为
'-838:59:59'到
'838:59:59'。大的时间主要用于表征事件的时间差。
注意:'1234'表示'00:12:34', '12:34'表示'12:34:00'
year:占1byte。 可以限定为year(4)(有效范围:1901
to 2155
)和year(2) (有效范围:1970-2069)
注意:'00'在year(2)和year(4)中代表的分别是2000和0000.
非法年份会记录成0000.
年份可以为'1999',也可以为数字1999.
年份可以用now()返回值赋值。
5 字符串类型
char(m): 定长字符串,m取值范围0-255
varchar(m): 变长字符串,m为字符串的最大长度,取值范围0-65535。 varchar在字符串前会有1-2bytes的长度前缀,用于标记可变字符串的长度。
注意:1. 对于过长的字符串,varchar类型会在插入前截断,并且输出警告, char 类型直接截断无反馈。
2. char类型读取时会截断尾部空白字符,而varchar不会
3. 除了模式匹配外,mysql中的字符串比较都是忽略尾部空白字符的。
6 二进制类型
bit(m): 用于存储二进制值,m为最大二进制位数(1-64)。赋值可以用b'value', 例如 b'10001000'等等。
binary(m): 类似char,但是其存储的是二进制字符串,而没有包含字符集,因此所有的排序比较都是根据二进制代表的数值来进行的。m为最大可储存的byte数, 0<=m<=255.
varbinary: 类似varchar, m<65535, 其实际所占空间为存入的内容长度+1或者2.
注意:1. binary插入数据时,位数不足会用ox00在最右边填充, 而varbinary没有填充。
2. binary没有字符集和字符规则,而char binary存储的是普通字符串通过二进制规则进行存储,这二者是不一样的。
blob (TINYBLOB-2^8+1bytes
, BLOB-2^16+1bytes
, MEDIUMBLOB-2^24+2bytes
, and LONGBLOB-2^32+2bytes
): blob是binary large object.
text (TINYTEXT
-2^8+1bytes, TEXT-2^16+1bytes
, MEDIUMTEXT-2^24+2bytes
, and LONGTEXT-2^32+2bytes
):
注意:blob和text的存取无填充无截断。
enum:可取的选项数小于65535, 实际操作中一般不多于3000.
1. 索引从1开始
2. 插入enum中的字符串如果不存在与选项中,则会插入空字符串,索引为0.
3. 如果enum列可以为空,则默认为空,否则默认为第一个索引的值。
4. enum的排序是根据索引值来进行的。如果要按字母顺序表来进行,则 要使用ORDER BY CAST(col
AS CHAR)
5. enum的内容只能通过常量来建立
set: 最多可以有64个不同的成员
1. 重复的成员会导致警告,或者报错(strict mode)
2. 自动删除结尾空白
3. set以数值存储。每个成员代表一个bit位,若以数值返回成员则分别为1, 2, 4, 8......
4. 插入数据时,每个成员都只计入一次
5. 查询, 使用find_in_set或者like, 例如:
mysql>SELECT * FROM
mysql>tbl_name
WHERE FIND_IN_SET('value
',set_col
)>0;SELECT * FROM
tbl_name
WHEREset_col
LIKE '%value
%';
也可以查找索引和多个成员, 如:
mysql>SELECT * FROM
mysql>tbl_name
WHEREset_col
& 1;SELECT * FROM
tbl_name
WHEREset_col
= 'val1
,val2
';