数据库基础:列的数据类型【MySQL】
数据类型
MySQL中定义数据字段的类型对数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
M表示整数部分所占字节,D表示小数部分所占字节。
M+D表示数据所占字节数。
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
在这里给出提示:
一般情况下,我们在插入时间类型和字符串类型使用单引号插入,不使用双引号插入。
添加DATE类型时间
创建表test
mysql> CREATE TABLE test(id INT,_date DATE);
插入DATE类型时间
mysql> INSERT INTO test VALUES(1,‘1990-09-09’);
查看表test所有的列
SELECT * FROM test;
添加TIME类型时间
创建表test2
mysql> CREATE TABLE test2(id INT,_time TIME);
插入TIME类型的时间
查看表test2所有列
mysql> INSERT test2 VALUES(2,‘11:12:2’);
SELECT * FROM test2;
添加YEAR类型时间
创建表test3
mysql> CREATE TABLE test2(id INT,_time YEAR);
插入YEAR类型的时间
mysql> INSERT test3 VALUES(2,‘1999’);
查看表test3所有列
SELECT * FROM test3;
添加DATETIME类型时间
创建表test4
mysql> CREATE TABLE test4(id INT,_time DATETIME);
查看test4表结构
DESC test4;
给表test4中插入数据
INSERT INTO test4 VALUES(1,’1999-09-09 10:10:10’);
查看表test4所有列
添加TIMESTAMP类型时间
创建test5
mysql> CREATE TABLE test4(id INT,_time TIMESTAMP);
给表test5中插入时间数据
INSERT INTO test5 VALUES(1,’19990909101010’);
查看表test5所有列
通过函数获得时间进行填充
那么上面给出的我们都是手动输入的,那么接下来我们给出一种使用函数来进行填充的方法。
获取当前的日期和时间
STLECT NOW();
获取当前日期
STLECT CURRENT_DATE();
获取当前时间
STLECT CURRENT_TIME();
演示DATETIME通过NOW()函数来赋值
查看test4并且通过NOW()函数来赋值
查看test4表的所有列
我们看到当前时间插入成功。
其他表格的插入时间和使用NOW()函数插入DATETIME类型相似,我们这里直接给出说明,读者下来可以自行验证。
DATE可以通过CURDATE()来赋值当前的日期,
TIME可以通过CURTIME()来赋值当前的时间,
DATETIME与TIMESTAMP都可以通过函数NOW()来赋值当前的时间日期。
YEAR 可以通过函数来插入,那么会直接截取YEAR部分。
字符串类型
类型说明
CHAR与CARCHAR说明
CHAR(n)里面的n表示字符串长度的大小,单位是字节。
VARCHAR(n) 是一个可变长字符串,指定的n也是表示字符串最多能存放多少个字符。
例如4个字节的字符串,CHAR和CARCHAR都指定的是10,CHAR类型会使用10个字节来保存,而CARCHAR会使用4个字节来保存。
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BLOB是一个二进制大对象,可以容纳可变数量的数据。
存放二进制内容的时候使用BLOB类型。
有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
如果是纯文本,那么全部都是可见字符,例如使用ASCII编码的。那么就使用TEXT类型。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。
那么我们在存储的时候就根据我们存储数据的类型,在创建表的时候进行字符串类型选取。
CHAR和VARCHAR类型在选取的时候涉及内存空间分配的问题,我们再来探讨一下:
MySQL中的字符串类型小结
(1)char,存定长,速度快,存在空间浪费的可能,会处理尾部空格,上限255。
例如我们上面CHAR(4)的第一种情况,里面存储的就是4个空格,第二种情况后面两个字符就是空格。永远都是占用4个字节。
(2)varchar,存变长,速度慢,不存在空间浪费,不处理尾部空格,上限65535,但是有存储长度实际65532最大可用。我们可以看到,上面使用VARCHAR(4)的时候数据存储部分会比数据部分多一个字节来表明字符串的结束。
超过CHAR和VARCHAR的n设置后,字符串会被截断。
(3)text,存变长大数据,速度慢,不存在空间浪费,不处理尾部空格,上限65535,text不会使用申请的数据空间字节来表示字符串的结束,而是会用额外空间存放数据长度,所以可以全部使用65535。
从官方文档中我们可以得知当varchar大于某些数值的时候,其会自动转换为text,规则如下:
大于varchar(255)转换为 tinytext来表示
大于varchar(500)转换为 text来表示
大于varchar(20000)转化为 mediumtext来表示