MySQL的数值型数据类型大致可以分为两类,一类是整数,一类是浮点数或者小数。这些类别中的每一个都有许多不同的子类型,每个子类型支持不同大小的数据,MySQL允许我们指定数值字段中的值是正数、负数还是用零填充。
1、整型
MySQL数据类型
含义(有符号)
锡银(米)
1字节范围(-128~127)
小整数(m)
2字节范围(-32768~32767)
中值(米)
3字节范围(-8388608~8388607)
整数(m)
4字节范围(-2147483648~2147483647)
bigint(m)
8字节范围(-9.22*10的18次方)
如果取值范围是无符号的,最大值加倍,比如tinyint unsigned的取值范围是(0~256)。
int(m)中的m表示SELECT查询结果集中的显示宽度,不影响实际值范围或显示宽度。不知道这个m有什么用?
2、浮点型(float和double)
MySQL数据类型
含义
浮动(m,d)
单精度浮点型8位精度(4字节)m总数,d位小数
双精度(m,d)
双精度浮点型16位精度(8字节)m总数,d位小数
设一个字段定义为float(5,3)。如果插入一个123.45678的数,数据库中的实际数是123.457,但总数仍以实际数为准,即6位数。
3、定点数
浮点型在数据库中存储近似值,而定点型在数据库中存储精确值。
参数m65的decimal(m,d)是总数,d30和dm是小数位数。
4、字符串(char,varchar,_text)
MySQL数据类型
含义
字符
固定长度,最多255个字符
可变字符
固定长度,最多65,535个字符
小文本
可变长度,最多255个字符
文本
可变长度,最多65,535个字符
媒体文本
可变长度,最长为2的24次方1个字符
长文本
可变长度,最大为2的32次方1个字符
和char varchar:
1.char(n)如果存储的字符数小于n,后面会跟一个空格,然后在查询过程中会去掉这个空格。所以char type存储的字符串末尾不能有空格,varchar不限于此。
2.char(n)的长度是固定的,不管存储多少个字符,char(4)都会占用4个字节。varchar是存储1个字节(n=255)或2个字节(n255)的实际字符数,所以存储3个字符的varchar(4)将占用4个字节。
3.3.char类型的字符串检索速度比varchar类型快。
Varchar和文本:
1.varchar可以指定n,text不能。内存varchar是1字节(n=255)或2字节(n255)的实际字符数,text是2字节的实际字符数。
2 .文本类型不能有默认值。
3.varchar可以直接创建index,创建index时text要指定前几个字符。varchar的查询速度比文本快,文本的索引在所有索引都创建好的情况下似乎不起作用。
5.二进制数据(_Blob)
1._BLOB和_text的存储方式不同。_TEXT存储为文本,而英语区分大小写,而_Blob存储为二进制,不区分大小写。
2.存储在_ blob中的数据只能整体读出。
3._TEXT可以指定字符集,但_BLO不能。
6.日期时间类型
MySQL数据类型
含义
日期
日期 2008年12月2日
时间
时间 12时25分36秒
日期时间
日期 2008-12-2 22:06:44
时间戳
自动存储记录修改时间
如果一个字段定义为timestamp,那么当其他字段被修改时,这个字段中的时间数据会自动刷新,所以这个数据类型字段可以存储这个记录的最后修改时间。
数据类型的属性
MySQL关键字
含义
空
列可以包含空值。
不为空
列不允许包含空值
系统默认值
系统默认值
主关键字
主键
自动递增
自动递增,适用于整数类型
无符号的
没有符号
字符集名称
指定一个字符集。
该表列出了各种数值类型、它们允许的范围和占用的内存空间。
类型
大小
范围(签名)
范围(未签名)
使用
TINYINT
1字节
(-128,127)
(0,255)
小整数值
SMALLINT
2字节
(-32 768,32 767)
(0,65 535)
大整数值
培养基
3字节
(-8 388 608,8 388 607)
(0,16 777 215)
大整数值
或INT整数
4字节
(-2 147 483 648,2 147 483 647)
(0,4 294 967 295)
大整数值
BIGINT
8字节
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)
最大整数值
漂浮物
4字节
(-3.402 823 466 E 38,1.175 494 351 E 38),0,(1.175 494 351 E 38,3.402 823 466 351 E 38)
0,(1.175 494 351 E-38,3.402 823 466 E-38)
单精度
浮点值
两倍
8字节
(1.797 693 134 862 315 7 E 308,2.225 073 858 507 201 4 E 308),0,(2.225 073 858 507 201 4 E 308,1.797 693 134 862 315 7 E 308)
0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E 308)
双倍精密度
浮点值
小数
对于DECIMAL(M,D),如果MD,则为M 2,否则为D 2
取决于m和d的值
取决于m和d的值
小数值
INT 类型MySQL中支持的五种主要整数类型是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。这些类型在很大程度上是相同的,只是它们存储的值的大小不同。
MySQL以可选的显示宽度指示器的形式扩展了SQL标准,因此当从数据库中检索到一个值时,它可以被延长到指定的长度。例如,如果将字段的类型指定为INT(6),则可以确保从数据库中检索时,包含少于6位数的值可以自动填充空格。请注意,使用宽度指示器不会影响字段的大小和它可以存储的值的范围。
如果我们需要在一个超出允许范围的字段中存储一个数字,MySQL会在存储它之前,根据最接近它的允许范围的结尾截断它。另外特别的一点是,在不规则值插入表之前,MySQL会自动更改为0。
ignored修饰符指定字段只保存正值。因为不需要保存数字的正负符号,所以存储时可以节省一个“位”的空间。从而增加该字段可以存储的值的范围。
ZEROFILL修饰符指定0(不是空格)可用于真正补充输出值。使用这个修饰符来防止MySQL数据库存储负值。
FLOAT、DOUBLE 和 DECIMAL 类型MySQL支持的三种浮点类型是float、DOUBLE和DECIMAL。FLOAT值类型用于表示单精度浮点值,而DOUBLE值类型用于表示双精度浮点值。
像整数一样,这些类型也有附加参数:显示宽度指示器和小数点指示器。例如,语句FLOAT(7,3)规定显示的值不超过7位,小数点后有3位。
对于小数点后位数超过允许范围的值,MySQL会自动四舍五入到最接近的值并插入。
DECIMAL数据类型用于精度要求非常高的计算中。此类型允许指定值的精度和计数方法被选为参数。这里的精度是指为该值保存的有效位数的总数,而计数法是指小数点后的位数。例如,DECIMAL(7,3)语句规定存储值不能超过小数点后7位和3位。
忽略DECIMAL数据类型的精度和计数方法修饰符会导致MySQL数据库将所有标识为该数据类型的字段的精度设置为10,计算方法设置为0。
FLOAT、DOUBLE和DECIMAL数据类型也可以使用无符号和零填充修饰符。并且效果和INT数据类型一样。
字符串类型
MySQL提供了八种基本的字符串类型,可以存储从简单的字符到巨大的文本块或二进制字符串数据。
类型
大小
使用
茶
0-255字节
性格;角色;字母
可变长字符串
0-255字节
可变长度字符串
TINYBLOB
0-255字节
不超过255个字符的二进制字符串
小文本
0-255字节
短文本字符串
一滴
0-65 535字节
二进制形式的长文本数据
文本
0-65 535字节
长文本数据
MEDIUMBLOB
0-16 777 215字节
二进制形式的中等长度文本数据
媒体文本
0-16 777 215字节
中等长度文本数据
LOGNGBLOB
0-4 294 967 295字节
二进制形式的最大文本数据
长文本
0-4 294 967 295字节
最大文本数据
CHAR 和 VARCHAR 类型CHAR类型用于固定长度的字符串,必须用括号中的大小修饰符来定义。这个大小修改量的范围是0-255。大于指定长度的值将被截断,而小于指定长度的值将用空格填充。
字符类型可以使用二进制修饰符。当用于比较运算时,该修饰符使CHAR以二进制方式参与运算,而不是传统的区分大小写的方式。
CHAR类型的一个变体是VARCHAR类型。它是一个可变长度的字符串类型,并且还必须有一个范围在0-255之间的指示器。CHAR和VARCHGAR的区别在于MuSQL数据库处理这个指标的方式:CHAR将这个大小视为值的大小,如果不够长就用空格填充。VARCHAR类型将其视为最大值,只使用存储字符串实际需要的长度(增加一个额外的字节来存储字符串本身的长度)来存储值。因此,短于指示符长度的VARCHAR类型不会用空格填充,但长于指示符的值仍会被截断。
因为VARCHAR类型可以根据实际内容动态改变存储值的长度,所以在不确定一个字段需要多少个字符时使用VARCHAR类型可以大大节省磁盘空间,提高存储效率。
使用二进制修饰符时,VARCHAR类型与CHAR类型完全相同。
TEXT 和 BLOB 类型当字段长度超过255时,MySQL提供两种类型,TEXT和BLOB。根据存储数据的大小,它们都有不同的子类型。这些大型数据用于存储二进制数据类型,如文本块或图像和声音文件。
文本blob和文本BLOB在分类和比较上是有区别的。BLOB区分大小写,而文本不区分大小写。大小修改器不用于各种BLOB和文本子类型。大于指定类型支持的最大范围的值将被自动截断。
日期和时间类型
当处理日期和时间类型的值时,MySQL有5种不同的数据类型可供选择。它们可以分为简单日期和时间类型,以及混合日期和时间类型。根据需要的精度,每个子类型中可以使用子类型,MySQL内置函数可以将各种输入格式变成一种标准格式。
类型
大小
(字节)
范围
格式
使用
日期
三
1000-01-01/9999-12-31
年-月-日
日期值
时间
三
-838:59:59/838:59:59
时:分:秒
时间值或持续时间
年
一个
1901/2155
YYYY
年值
日期时间
八
1000-01-01 00:00:00/9999-12-31 23:59:59
YYYY-MM-DD HH:MM:SS
混合日期和时间值
时间戳
八
2037年的某个时候
YYYYMMDD HHMMSS
混合日期和时间值,时间戳
DATE、TIME 和 TEAR 类型MySQL的DATE和TEAR用来存储简单的日期值,TIME用来存储时间值。这些类型可以描述为不带分隔符的字符串或整数序列。如果描述为字符串,日期类型的值应该用连字符分隔,而时间类型的值应该用冒号分隔。
需要注意的是,没有冒号分隔符的时间类型值会被MySQL理解为持续时间,而不是时间戳。
MySQL还最大限度地翻译日期年份中两个数字的值,或者SQL语句中为TEAR type输入的两个数字。因为所有撕裂类型的值都必须用4个数字存储。MySQL试图将2位数的年份转换成4位数的值。将00-69范围内的值转换为2000-2069范围内的值。将值从70-99转换为1970-1979。如果MySQL自动转换的值不符合我们的需求,请输入4位数字代表的年份。
DATEYIME 和 TIMESTAMP 类型除了日期和时间数据类型,MySQL还支持两种混合类型,DATEYIME和TIMESTAMP。它们可以将日期和时间存储为单个值。这两种类型通常用于自动存储包含当前日期和时间的时间戳,在需要执行大量数据库事务并为调试和审计目的建立审计线索的应用程序中可以发挥很好的作用。
如果我们没有显式地给时间戳类型的字段赋值,或者被赋予一个空值。MySQL会自动用系统的当前日期和时间填充它。
复合类型
MySQL还支持两种复合数据类型,ENUM和SET,它们扩展了SQL规范。虽然这些类型在技术上是字符串类型,但它们可以被视为不同的数据类型。一个枚举类型只能从一个集合中获取一个值;集合类型允许您从集合中获取任意数量的值。
ENUM 类型枚举类型有点类似于单个选项,因为它只允许集合中有一个值。在处理相互排列的数据时,比如人类的性别,人们很容易理解。枚举类型字段可以从集合中获取值或使用空值。其他输入将导致MySQL在该字段中插入一个空字符串。此外,如果插入值的大小写与集合中值的大小写不匹配,MySQL将自动使用插入值的大小写将其转换为与集合大小写一致的值。
枚举类型可以作为数字存储在系统中,并由从1开始的数字进行索引。一个枚举类型最多可以包含65,536个元素,其中一个是MySQL保留的,用于存储错误信息。此错误值由索引0或空字符串表示。
认为MySQL ENUM类型集中出现的值是合法输入,其他任何输入都将失败。这表明,通过搜索包含空字符串或相应的数字索引0的行,可以很容易地找到错误记录的位置。
SET 类型集合类型类似于枚举类型,但不相同。集合类型可以从预定义的集合中获取任意数量的值。与ENUM type相同,任何在SET type字段中插入非预定义值的尝试都会导致MySQL插入一个空字符串。如果您插入一条同时包含合法元素和非法元素的记录,MySQL将保留合法元素并删除非法元素。
一个集合类型最多可以包含64个元素。在SET元素中,值被存储为一个单独的“位”序列,这些“位”代表与之对应的元素。Bit是创建有序元素集的一种简单而有效的方法。而且它还删除了重复的元素,所以在集合类型中不可能包含两个相同的元素。
如果要在类型集的字段中查找非法记录,只需要查找包含空字符串或二进制值为0的行。