在一次面试中被面试官问到了这样一个问题:常见的mysql数据类型有哪些?这个问题不像其他的数据库方面的八股,什么索引啊、事务啊,比较冷门,但是确实日常使用必定接触到,冷不丁地被问到,事前没有系统总结,结果答得并没有一气呵成,这次来总结下。
sql数据类型
数据类型是定义列中可以存储什么数据以及该数据实际怎样存储的基本规则。
数据类型用于以下目的:
- 数据类型用于限制可存储在列中的数据
- 数据类型允许在内部更有效地存储数据
- 数据类型允许变换排序顺序
在设计表时应该特别重视所用的数据类型,使用错误的数据类型可能会严重地影响应用程序的功能和性能。同时,更改包含数据的列不是一件小事,而且这样做可能会导致数据丢失。
串数据类型
最常用的数据类型是串数据类型。有两种基本的串类型,分别为:定长串和变长串。
定长串接收长度固定的字符串,其长度是在创建表时指定的。定长列不允许多于指定的字符数目。它们分配的存储空间与指定的一样多,当列的大小小于指定大小时,或根据需要补为null。
变长串存储任意长度的文本。变长串虽然较定长串更加灵活,但是性能却比定长串低很多。
数值数据类型
数值数据类型存储数值。支持取值范围越大,所需存储空间越多。常用数值数据类型如下表:
数值数据类型 | 说明 |
---|---|
BIT | 单个二进制位值,或者为0或者为1,主要用于开关标志 |
DECIMAL | 定点或精度可变的浮点值 |
FLOAT | 浮点值 |
INT | 4字节整数值 |
REAL | 4字节浮点值 |
SMALLINT | 2字节整数值 |
TINYINT | 1字节整数值 |
日期和时间数据类型
所有DBMS都支持用来存储日期和时间值的数据类型。如下表:
日期时间数据类型 | 说明 |
---|---|
DATE | 日期值 |
DATETIME(或TIMESTAMP) | 日期时间值 |
SMALLDATETIME | 日期时间值,精确到分 |
TIME | 时间值 |
二进制数据类型
二进制数据类型是最不具有兼容性的数据类型,同时也是使用最少的数据类型。迄今为止所说的所有数据类型都是具有特定的用途,二进制数据类型则不同,它可以包含任何数据,甚至可以包含二进制信息,比如图像、多媒体等。
二进制数据类型 | 说明 |
---|---|
BINARY | 定长二进制数据类型,根据不同的实现,最大值从几百字节到几千字节不等 |
LONG RAW | 变长二进制数据,最长2GB |
RAW | 变长二进制数据,最长255B |
VARBINARY | 变长二进制数据 |