在mysql中不存在的数据类型_mysql中的数据类型

1 整型

4c90a1a55baf1d3196300d996cde9e01.png

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;

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)(有效范围:1901to2155)和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, andLONGBLOB-2^32+2bytes):blob是binary large object.

text (TINYTEXT-2^8+1bytes,TEXT-2^16+1bytes,MEDIUMTEXT-2^24+2bytes, andLONGTEXT-2^32+2bytes):

注意:blob和text的存取无填充无截断。

enum:可取的选项数小于65535, 实际操作中一般不多于3000.

1. 索引从1开始

2. 插入enum中的字符串如果不存在与选项中,则会插入空字符串,索引为0.

3. 如果enum列可以为空,则默认为空,否则默认为第一个索引的值。

4. enum的排序是根据索引值来进行的。如果要按字母顺序表来进行,则 要使用ORDER BY CAST(colAS 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 tbl_name WHERE FIND_IN_SET('value',set_col)>0;

mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

也可以查找索引和多个成员, 如:

mysql> SELECT * FROM tbl_name WHERE set_col & 1;

mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值