数据库基础:列的数据类型【MySQL】

数据类型

MySQL中定义数据字段的类型对数据库的优化是非常重要的。MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型

数据库基础:列的数据类型【MySQL】

数据库基础:列的数据类型【MySQL】

数据库基础:列的数据类型【MySQL】

数据库基础:列的数据类型【MySQL】

M表示整数部分所占字节,D表示小数部分所占字节。
M+D表示数据所占字节数。

日期和时间类型

数据库基础:列的数据类型【MySQL】

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

在这里给出提示:
一般情况下,我们在插入时间类型和字符串类型使用单引号插入,不使用双引号插入。

添加DATE类型时间

创建表test

mysql> CREATE TABLE test(id INT,_date DATE);
数据库基础:列的数据类型【MySQL】

插入DATE类型时间

mysql> INSERT INTO test VALUES(1,‘1990-09-09’);
数据库基础:列的数据类型【MySQL】

查看表test所有的列

SELECT * FROM test;
数据库基础:列的数据类型【MySQL】

添加TIME类型时间

创建表test2

mysql> CREATE TABLE test2(id INT,_time TIME);
数据库基础:列的数据类型【MySQL】

插入TIME类型的时间

查看表test2所有列

mysql> INSERT test2 VALUES(2,‘11:12:2’);
SELECT * FROM test2;

数据库基础:列的数据类型【MySQL】

添加YEAR类型时间

创建表test3

mysql> CREATE TABLE test2(id INT,_time YEAR);

插入YEAR类型的时间

mysql> INSERT test3 VALUES(2,‘1999’);
数据库基础:列的数据类型【MySQL】

查看表test3所有列

SELECT * FROM test3;

数据库基础:列的数据类型【MySQL】

添加DATETIME类型时间

创建表test4

mysql> CREATE TABLE test4(id INT,_time DATETIME);
数据库基础:列的数据类型【MySQL】

查看test4表结构

DESC test4;
数据库基础:列的数据类型【MySQL】

给表test4中插入数据

INSERT INTO test4 VALUES(1,’1999-09-09 10:10:10’);

数据库基础:列的数据类型【MySQL】

查看表test4所有列

数据库基础:列的数据类型【MySQL】

添加TIMESTAMP类型时间

创建test5

mysql> CREATE TABLE test4(id INT,_time TIMESTAMP);
数据库基础:列的数据类型【MySQL】

给表test5中插入时间数据

INSERT INTO test5 VALUES(1,’19990909101010’);

数据库基础:列的数据类型【MySQL】

查看表test5所有列

数据库基础:列的数据类型【MySQL】

通过函数获得时间进行填充

那么上面给出的我们都是手动输入的,那么接下来我们给出一种使用函数来进行填充的方法。

获取当前的日期和时间

STLECT NOW();
数据库基础:列的数据类型【MySQL】

获取当前日期

STLECT CURRENT_DATE();
数据库基础:列的数据类型【MySQL】

获取当前时间

STLECT CURRENT_TIME();
数据库基础:列的数据类型【MySQL】

演示DATETIME通过NOW()函数来赋值

查看test4并且通过NOW()函数来赋值

数据库基础:列的数据类型【MySQL】

查看test4表的所有列

数据库基础:列的数据类型【MySQL】

我们看到当前时间插入成功。

其他表格的插入时间和使用NOW()函数插入DATETIME类型相似,我们这里直接给出说明,读者下来可以自行验证。

DATE可以通过CURDATE()来赋值当前的日期,
TIME可以通过CURTIME()来赋值当前的时间,
DATETIME与TIMESTAMP都可以通过函数NOW()来赋值当前的时间日期。
YEAR 可以通过函数来插入,那么会直接截取YEAR部分。

字符串类型

类型说明

数据库基础:列的数据类型【MySQL】

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】

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来表示