目录
一、数据类型
一、数值型数据
1、整数类型
2、小数类型
二、字符串类型
1、char
2、VARCHAR
3、BLOB和TEXT类型
三、日期和时间类型
四、枚举类型
五、set类型
一、数据类型
首先得明白什么是数据类型,数据类型其实就是一种对数据的约定,就像我们在用表格统计数据的时候,为了方便查看,得按照表头填写,姓名,年龄一般都是按照格式填写,这个时候其实就相当于规定了,姓名为一个字符串类型,年龄可以是个数字类型,学历这种带有枚举值的就可以定义为枚举类型。
下面介绍下MYSQL的数据类型,MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要。因此介绍以下MYSQL的数据类型
一、数值型数据
1、整数类型
mysql提供的整形类型如下:
这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。当使用这些整数类型之一创建列时,MySQL将为存储数据分配合适大小的空间,从1个字节(tinyint)到8个字节(bigint)不等。因此在选择类型时,只需要确保能够容纳预期的最大数字即可,这样可以避免浪费不必要的存储空间。
整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使正数的上限提高一倍。例如TINYINT.UNSIGNED可以存储的范围是0~255,而TINYINT 的存储范围是-128~127。还有ZEROFILL修饰符规定0(不是空格)可以用于填补输出值。请注意,使用这个修饰符可防止MySQL存储负值。
UNSIGNED测试
比如我们新建一个表,字段类型选择tinyint,然后修改字段值为128,超过其最大限制,则会报错
修改 tinyint 为 tinyint UNSIGNED,再试下
此时128就可以包容了,
同样此时输入负数,则会报错
ZEROFILL测试,设置字段class类型为 int ZEROFILL,长度为6,输入12
则实际数据如下 ,补全至六位
2、小数类型
MySQL支持的三个浮点类型是FLOAT,DOUBLE和DECIMAL类型。FLOAT数值类型用于表示单精度浮点数值,而DOUBLE数值类型用于表示双精度浮点数值。
当使用浮点类型时,可以指定其精度(小数点左边到右边所允许的数字总位数)和有效位(小数点右边所允许的数字位数),当然这不是必需的。需要注意的是,如果数字位超过了该列所定义的精度或有效位,那么该列中存储的数据将会被四舍五入。例如,一个定义为float(4,2)的列将会存储4位数字,其中两位在小数点左边,两位在小数点右边。因此,如果向该列添加数据27.44和8.19是允许的,但17.8675将会被四舍五入为17.87,178.375则会产生一个错误。和整数类型一样,浮点列也可以被定义为unsigned,但这里只是禁止列中存放负数,并没有改变该列所存储数据的范围。
二、字符串类型
MySQL提供了8个基本的字符串类型,可以存储范围从简单的一个字符的字符串到i大的文本块或二进制数据的字符串数据。
1、char
最简单的类型是CHAR类型,它用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符范围为0到255,指定了要存储的值的长度,例如,语句CHAR (10)指定了一个长度为10个字符的值。比指定长度小的值将会用空格适当填补﹔比指定长度大的值将被自动截短。
2、VARCHAR
CHAR类型的-一-个变体是VARCHAR类型,它用于变长字符串,它也必须带有一个范围在0到255之间的大小指示器。VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)因为字段会根据它的内容动态地增长和缩短,所以当不能确定字段要存储多少个字符时,使用这种类型是--个很好的想法;因为VARCHAR类型只使用需要的最小数目的字节,所以它在数据库性能方面导致了更大的存储效率和(可能)空前的改进。与CHAR类型一样,VARCHAR类型也有一个可选的BINARY修饰符,它的功能跟前面的描述相同。
3、BLOB和TEXT类型
BLOB和TEXT都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。BLOB类型区分大小写,TEXT类型不区分大小写。
实际上,它们分别属于两组不同的数据类型家族﹔字符类型是TINYTEXT,SMALLTEXT,TEXT,NEDIUMTEXT,CONGTEXT﹔对应的二进制类型是TINYBLOB,SMALLBLOB,BLOB,MEDIUPMBLOB,LONGBLOB。BLOB是SMALLBLOB的同义词,TEXT是 SMALLTEXT的同义词。
三、日期和时间类型
除了字符串和数字,处理信息还会经常用到日期或时间。这种类型的数据被称为时间型数据。MySQL用DATE 和YEAR类型描述简单的日期值,而使用TIME类型描述时间值。这些值可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE类型的值应该使用连字号作为分隔符分隔开,而TIME类型的值应该使用冒号作为分隔符分隔开。
日期格式组成成分
四、枚举类型
Enum枚举类型是字符串类型,其值是从事先指定的一系列值中选出,适用在某列的取值范围已经固定,且在设置枚举类型的时候要给定枚举值,比如设置性别为枚举类型,如果仅仅设置enum类型,则会报错如下
这个时候在下边加上值 或者类型里边填写 enum('男','女')就可创建成功
这个时候如果随便输入其他的值,则会报错
1265 - Data truncated for column 'sex' at row 1
五、set类型
SET类型与ENUM类型相似但又不完全相同, SET类型允许从预先定义的字符串值集合中选取任意数目的值。语句使用ENUM类型的字段最多包含一个元素,而SET类型不同,语句为SET类型的字段可以包含0个、1个或1个以上从允许值集合中选取的值。这使SET类型可以做多个选择的选取。通俗点可以理解ENUM为单选,SET为多选,可以选择多个选项,同样创建SET类型也需要给定值。
插入或者修改SET类型sql多个值用逗号隔开 ,如下:
update student a set a.setTest ='大专,本科' where a.id='2';