史上最简单MySQL教程详解(基础篇)之数据类型

数值类

整数型

数据类型 说明 字节数
TINYINT -128~127 1
SMALLINT -32768~32767 2
MEDIUMINT -8388608~8388607 3
INT -2147483648~2147483647 4
BIGINT -9223372036854775808~9223372036854775807 8

小数型

数据类型 说明 字节数
FLOAT 单精度小数 4
DOUBLE 双精度小数 8
DECIMAL 精确计算时使用的数据类型 根据精度确定

注意事项

  • 指定精度时,如果插入值的精度高于实际定义的精度,系统会自动进行四舍五入处理,使值的精度达到要求。
  • 当不指定精度时,Float、Double默认会保存实际精度,而Decimal默认是整数;

日期类

数据类型 说明
DATE类型: 支持的范围为’1000-01-01’到’9999-12-31’
TIME类型: 支持的范围是’-838:59:59’到’838:59:59’
DATETIME类型 支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’
TIMESTAMP类型: 时间戳,用于INSERT或UPDATE操作时自动获得当前时间
YAER类型: 支持范围是1901~2155

注意事项

  • 在MySQL中除了timestamp 类型允许有默认值外,其他时间类型都不能有默认值,不然会报错;
  • TimeStamp使用Current_TimeStamp()而DateTime使用NOW(来获取当前时间);
  • Datetime存储的时间与时区无关,Timestamp存储的时间及显示的时间都依赖于当前时区;

字符串类

数据类型 说明
char: 固定长度字符串,需要设定长度值,不足设定值,则右侧自动填满空格;最大255个字符
varchar: 可变长字符串需要设定长度值,最大65532个字节
tinytext 用于存储普通文本, 2 8 -1字节的可变长度字符串
text: 用于存储普通文本,不受行的最大长度的限制,216-1字节的可变长度字符串
mediuntext 用于存储普通文本,224-1字节的可变长度字符串
longtext 用于存储普通文本,264-1字节的可变长度字符

注意事项:

  • CHAR 和 VARCHAR 的区别:
    1.字符串末尾空格的处理方式不同。
    2.CHAR列的长度固定为创建表时声明的长度,所以效率比VARCHAR要高,但会造成一定的空间浪费,VARCHAR 与之相反

二进制类

数据类型 说明
binary: 定长二进制字符串,应该设定长度值,按“二进制字节”保存存字符数据,最大255个字节,无编码问题
varbinary: 变长二进制字符串,需要设定长度值,按“二进制字节”存字符数据,最大65532个字节,无编码问题
TINYBLOB 可变长二进制数据,最多255个字节
BLOB 可变长二进制数据,最多216-1个字节
MEDIUMBLOB 可变长二进制数据,最多224-1个字节
LONGBLOB 可变长二进制数据,最多232-1个字节

注意事项:

  • BINARY、VARBINARY和 BLOB可以理解为是CHAR、VARCHAR和TEXT的二进制版本
  • BINARY和VARBINARY:两者唯一的差别在于BINARY当长度不够时会补“\0”。
  • BLOB类型是一种特殊的二进制类型。BLOB可以存储数据量很大的二进制数据,如图片,视频等。不同BLOB之间的区别也只是最大长度不同。

枚举类

数据类型 说明
ENUM(var1,var2,var3,…) 单选可能的枚举型
SET(var1,var2,var3,…) 多选可能的枚举型

数据类型选择的个人建议

  • 整型:根据要显示的最大值决定;
  • 浮点型:要显示小数。如果要精确到小数点后10位,就选择DOUBLE,而不应该选择FLOAT。同时,浮点数在存储过程中会出现精度丢失的问题。DECIMAL精度较高,浮点数会出现误差,如果精度较高,则应选择定点数DECIMAL;
  • 字符串型:定长与变长的区别,CHAR类型占用空间比较大,但是处理速度比VARCHAR快,如果长度变化不大,最好选择CHAR类型。对于长度不确定的,最好选择VARCHAR;
  • 时间:根据实际情况决定,如果需要显示的时间与时区对应,就应该选择TIMESTAMP;
  • ENUM类型和SET类型:长度不同,ENUM类型最多可以由65535个成员,而SET类型最多只能包含64个成员。且ENUM只能单选,而SET类型可以多选;
  • TEXT类型和BLOB类型:TEXT只能存储字符数据,而BLOB可以存储二进制数据。如果是纯文本,适合TEXT,,但是文本数据不是必要情况下,最好选择VarCharl类型。如果是图片,视频等适合存二进制,但通常图片视频等的储存是将文件储存在服务器,而在数据库记录文件地址来实现的;

猜你喜欢

转载自blog.csdn.net/m0_37888031/article/details/80418156