您的位置:首页 > 数据库 > MySQL

Mysql数据类型

2016-07-13 21:10 609 查看
所谓的数据类型:对数据进行统一的分类。从系统的角度出发,是为了使用统一的方式进行管理,更好的利用有限的空间。

SQL中将数据类型分了三大类:数值类型、字符串类型和时间日期类型



数值型

数值型数据:都是数值

系统将数值型分为整数型和小数型

整数型

存放整形数据:在SQL中 因为更多要考虑如何节省磁盘控件,所以系统将整型又细分了5类

1. Tinyint:迷你整型,使用一个字节存储,表示的状态最多为256种。(常用)

2. Smallint:小整型,使用2个字节存储,表示的状态最多为65536中。

3. Mediumint:中整型,使用3个字节存储

4. Int:标准整型,使用4个字节存储(常用)

5. Bigint:大整型,使用8个字节存储



创建一张整型表



插入数据:智能插入整型,只能插入范围内的数据



SQL中数值类型全部都是默认有符号:分正负

有时候需要使用无符号数据:需要给数据类型限定:int unsigned



数值的插入



查看表结构的时候,发现每个字段的数据类型之后都会自带一个括号,里面有指定的数字,代表显示宽度。



显示宽度:没有特别的含义,只是默认的告诉用户可以显示的形式而已,实际上用户是可以控制的,这种控制不会改变数据本身的大小。



显示宽度的意义:在于当数据不够显示宽度的时候,会自动让数据编程对应的显示宽度。通常需要搭配一个前导 0 来增加宽度,不改变值大小,zerofill(零填充),零填充会导致数值会自动变成无符号。



零填充 + 显示宽度的效果:



零填充的意义(显示宽度):保证数据格式

小数型

小数型:带有小数点或者范围超出整型的数值类型。

SQL中:将小数型细分成两种:浮点型和定点型

浮点型:小数点浮动,精度有限,而且会丢失精度

定点型:小数点固定,精度固定,不会丢失精度

浮点型

浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)

浮点型:理论分为两种精度

1. Float:单精度,占用 4 个字节存储数据,精度范围大概为7位左右

2. Double:双精度,占用 8 个字节存储数据,精度范围大概为 15 位左右



创建浮点数表:浮点的使用方式,直接 float表示没有小数部分,float(M,D):M代表总长度,D代表小数部分长度,整数部分长度为 M-D



插入数据:可以是直接小数,也可以是科学计数法



浮点型数据的插入:整数部分是不能超出长度的,但是小数部分可以超出长度(系统会自动四舍五入)



结果:浮点数一定会进行四舍五入,浮点数如果是因为系统进位导致整数部分超出指定长度,那么系统也允许成立。



定点型

定点型:绝对的保证整数部分不会被四舍五入,小数部分有可能(理论上也不会丢失精度)



创建定点数据表:以浮点数作为对比



插入数据:定点数的整数部分一定不能超出长度,小数部分的长度可以随意超出(四舍五入)



浮点数如果进位导致长度超出没有问题,但是定点数不行。



查看数据:



===华丽的分割线===

时间日期类型

datetime:时间日期,格式 YYYY-mm-dd HH:ii:ss,表示范围是从1000 到 9999 年,有0值 0000-00-00 00::00:00

data:日期,就是 datetime 中的 date 部分

time:时间(段),指定的摸个区间之间

timestamp:时间戳,并不是时间戳,只是从 1970 年开始的 YYYY-mm-dd HH:ii:ss

year:年份,两种形式,year(2) 和 year(4)



创建时间日期表



插入数据:时间time可以是负数,而且可以是很大的负数,year可以使用2位数插入,也可以使用4位数



timestamp字段:只要当前所在的记录被更新,该字段一定会自动更新



字符串类型

在SQL中,将字符串类型分成了 6 类:char,varchar,text,blob,enum,set

定长字符串:

定长字符串:char。磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度

char(L):L表示可以存储的长度,单位为字符,最大长度值可以为255

char(4) 在 UTF8下,需要12个字节

变长字符串:

变长字符串:varchar。在分配空间的时候,按照最大的空间分配,但是实际上最终用了多少,是根据具体的数据来确定。

varchar(L),L的理论长度是65536个字符,但是会多出 1~2个字节来确定存储的实际长度。

varchar(10) 的确存了10个汉字,utf8下 10*3 + 1 =31(bytes)

存储 3 个汉字,3 * 3 +1 =10(bytes)

如何选择定长或者变长字符串呢?

定长的磁盘空间比较浪费,但是效率高。比如身份证,手机号,用定长

变长的磁盘空间比较节省,但是效率低。比如姓名,地址,用变长。

文本字符串

如果数据量非常大,通常说超过255个字符,就会使用文本字符串

文本字符串根据存储的数据的格式分为 text 和 blob

Text:存储文字(二进制数据实际上都是存储路径)

Blob:存储二进制数据(通常不用)

枚举字符串

枚举:enum,事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个。

枚举的使用方式

定义enum可能出现的元素列表: //如:enum(‘男’,’女’,’不男不女’,’妖’,’保密’);

使用:存储数据,只能存储上面定义好的数据。

创建枚举表



加入数据:作用之一,规范数据格式



作用之二:节省存储空间:枚举实际存储的是数值,而不是字符串本身。



找出了枚举元素的规律:按照元素出现的顺序,从一开始编号。



枚举原理:枚举在进行数据规范的时候,系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中),然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统自动将数值转换成对应的字符串显示。

因为枚举实际存储的是数值,,所以可以直接插入数字



集合字符串

集合跟枚举类似:实际存储的是数值,而不是字符串(集合是多选)

集合使用方式:

定义:set(元素列表)

使用:可以使用元素列表中的多个,使用逗号分割



插入数据:可以使用多个元素字符串组合,也可以直接插入数值。



查看数据:数值 + 数据查看



集合中每一个元素都是对应一个对应二进制位



集合中元素的顺序没有关系,最终系统都会去匹配顺序。

集合的强大在于能够规范数据和节省空间

Mysql 记录长度

Mysql中规定:任何一条记录最长不能超过 65535 个字节(varchar永远达不到理论值)

varchar实际存储长度能达到多少呢?看字符集编码

UTF8下varchar的实际顶配:21844

GBK下varchar的实际顶配:32766



想用完整个65535个字节长度,增加一个tinyint字段 (not null)

Mysql中text文本字符串,不占用记录长度:额外存储,但是text文本字符串也是属于记录的一部分,一定需要占据记录中的部分长度:10个字节(保存数据的地址以及长度)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: