您现在的位置是:网站首页> 编程资料编程资料
mysql数据类型和字段属性原理与用法详解_Mysql_
2023-05-27
461人已围观
简介 mysql数据类型和字段属性原理与用法详解_Mysql_
本文实例讲述了mysql数据类型和字段属性。分享给大家供大家参考,具体如下:
本文内容:
- 数据类型
- 数值类型
- 整数型
- 浮点型
- 定点型
- 日期时间类型
- 字符串类型
- 补充:
- 显示宽度与zerofll
- 记录长度
- 数值类型
- 字段属性
- 空\不为空值:NULL、NOT NULL
- 主键:primary key
- 唯一键:unique key
- 自增长:auto_increment
- 默认值:default
- 字段描述:comment
- 补充:
- 复合键
首发日期:2018-04-08
数据类型:
mysql的数据类型就是存储数据的类型。
数值类型:
- 整数类型:tinyint,smallint,mediumint,integer,bigint
- 默认是有符号,如果需要使用无符号的数据类型要在后面加"UNSIGNED"
| 类型 | 简写 | 字节大小 | (signed)范围 | (unsigned)范围 | 备注 |
| 整数型: | |||||
| TINYINT | 1 | 0~255 | -128~127 | ||
| SMALLINT | 2 | 0~65535 | -32768~32767 | ||
| MEDIUMINT | 3 | 0~16777215 | -8388608~8388607 | ||
| INTEGER | INT | 4 | 0~4294967295 | -2147483648~2147483647 | |
| BIGINT | 8 | 0~264-1 | -263~263-1 |
- 小数类型:
- 浮点类型:float(size,d),double(size,d)
- size是数值的最大位数,d是小数点右侧的位数(即使你没输够那么多位也会补全那么多位)。
- FLOAT的精度为6~7位(依据情况不同?毕竟机器是以二进制存储的),DOUBLE的精度为14~15位
- 整数部分的个数为SIZE-D,直接存入的值的个数不能多于这个,但如果浮点数四舍五入导致整数进位而溢出超过最大位数的,系统允许成立(某些版本貌似已经不允许了,所以一般小数位也不要超过)。
- 很多时候没必要关注两个浮点的数值范围大小(是极大的),注重点应该是它的精度。


- 定点型:decimal(size,d)
- size是数值的最大位数,最大为65,d是小数点右侧的最大位数,最大为30。
- 定点型不允许因为小数部分四舍五入导致整数部分长度超出范围。
- DECIMAL是不会损失精度的。可以理解成使用“字符串”存储(MYSQL权威指南这么说)。

- 直接不带括号的数据类型float、double、decimal代表没有小数部分
- 浮点类型:float(size,d),double(size,d)
时间日期类型:
时间日期类型包括date,time,datetime,timestamp,year;
- Datetime:时间日期,格式是YYYY-MM-DD HH:II:SS,表示的范围是从1000到9999年(有些版本已经允许0-9999?不确定);
- Date:日期,格式是YYYY-MM-DD ,表示的范围是从1000到9999年
- Time:时间段,格式是HH:II:SS, 指定的时间在某个区间之间,有正负。表示的范围 -838:59:59~838:59:59,这代表某个日期的前后时间范围【如果你仅仅想要用来表示24小时内的时间,可以忽略它的时间范围】
- Timestamp:格式是YYYY-MM-DD HH:II:SS,表示的范围从1970-01-01 00:00:00到2038-01-19 03:14:07 【一旦该行记录被修改,那么timestamp会修改成当前时间。】
- Year:年份,表示的范围1901-2156

- 原本有两种格式,year(2)和year(4),但5.7中移除了year(2)。
字符串类型 :
set :集合字符串。将一个个特定的字符串放到集合里面。
- 定义了集合之后,不能插入集合元素之外的字符串,(可以插入多个符合条件的字符串)
- 集合字符串实际上也是仅仅存储数值,系统自动转换成对应的字符串。
- 集合中每一个元素对应一个二进制位,被选中的为1,没选中的为0,左边为二进制中的低位,右边为高位,从右到左得到二进制结果
create table my_set( hobby set('football','basketball','pingpong','computer') )charset utf8; insert into my_set values('basketball,computer'); insert into my_set values(3);-- 3=0011 insert into my_set values(5);-- 5=0101
enum :枚举字符串
- 有点类似set,但这里只能插入一个字符串(set类型的字段的值可以是多个set元素,但enum只能是其中一个元素)
- 将可能出现的数据列举出来,实际存储的数据只能是列举出来的数据。
- 使用枚举有利于统一数据,以及节省存储空间(枚举只是存储数值,系统转换成字符串)。
- 枚举元素实际上按定义的顺序标号,从1开始,所以可以直接插入枚举元素对应的数值。
- 如:
create table my_enum( gender enum('male','female','unknown') )charset utf8;
blob :二进制数据字符串
- 存储二进制数据(少用)
text :文字字符串
- 存储文字,当字符大于255时,一般使用text;
varchar :变长字符串
- varchar(L),L代表字符长度,单位为字符,最大长度为65536。在实际存储中需要1到2个字节来存储长度(1还是2由实际大小决定,216=35536,<=255的一般一个字节),在使用时根据定义的大小来分配空间,但会根据实际需要使用的缩小空间(比如规定60大小,实际只有30,那么实际空间就是31~32)。
- 当L大于255时,建议使用Text,而不是varchar;

char :定长字符串
- char(L),L代表字符长度,单位为字符,最大长度为255,不使用L时默认为1
- 不同环境中根据字符大小,实际占有的空间不同;在UTF8环境下,char(4)所用的字节数为4*3=12;
补充:
显示宽度 与填充 :
- 在列类型后面显示的数值,代表数据最终显示的最少位数(包含符号)。
- 一般不够显示宽度的数据都会采用空格填充,也可以使用zerofill来使用零填充(零填充会导致数据类型自动变成无符号的)。
- tiny(3)的空格填充效果:
,zerofill效果:
create table myInt(t1 TINYINT(3)); drop table myInt; insert into myInt values(127),(1); select * from myInt;
相关内容
点击排行
本栏推荐









,zerofill效果:
