• MySQL的数据类型


    1.整数

    TINYINT: 8 bit 存储空间

    SMALLINT: 16 bit 存储空间

    MEDIUMINT: 24 bit 存储空间

    INT: 32 bit 存储空间

    BIGINT: 64 bit 存储空间

    分为

    SIGNEN: 有符整数,可存储正数和负数,如 TINYINT SIGNED 表示的范围是 -127 ~ 128

    UNSIGNED: 无符整数,只能存储正数,但是表示的值是有符整数的两倍, 如 TINYINT UNSIGNED 表示的范围是 0 ~ 255

    有符整数和无符整数只有表示的值大小上的区别,存储空间和效率上都是一样的

    2.实数

    DECIMAL: 可表示比 BIGINT 还大的正数,保存时可以指定整数长度和小数位数,如 DECIMAL(18, 9) 表示总长18位,小数点后9位,一共占用9 Byte,小数点前4 Byte,小数点1 Byte, 小数点后4 Byte, 一般用于存储精确数据,如银行账目

    FLOAT: 32 bit, 0~23精度

    DOUBLE: 64 bit,  24~53精度

    DOUBLE和FLOAT比起DECIMAL,占用的存储更少,但是精度没有DECIMAL高

    3.字符串

    3.1 CHAR和VARCHAR

    CHAR:

    定长字符串,最大长度为255,mysql会分配固定的存储空间来存储CHAR,一般来讲用在需要经常执行长度经变化的UPDATE,但最大长度和平均长度相近的列上

    CHAR在获取值时,会将末尾空格删除,但是在比较值时,末尾的空格则会保存,效果参见下图

    VARCHAR:

    变长字符串,最大长度为65535,mysql会分配字符串实际长度的空间来存储VARCHAR,一般来讲用在不需要经常执行列值长度变化的UPDATE,但是最大长度又远大于平均长度的列上,因为当列值的长度变化时(例如某列从"Jack" => "I want to gank"),需要重新分配需要的存储空间,会造成额外的性能开销.

    CHAR和VARCHAR总是会使用字符编码的最大长度来作为单位存储空间,这是为了保证缓存中有足够的空间来存储字符串,例如使用UTF8,虽然UTF8是变长字符集(英文1Byte,中文3Byte),但是VARCHAR(10)仍然会占用30Bytes空间,即使里面一个中文字也没有.

    另外,VARCHAR会比原长度额外占用1~2个字节,用来表示字符串的长度,当字符串长度小于255时占用1 Byte, 否则占用 2 Byte

    查询时,CHAR去除末尾空格

    WHERE字句比较字符串时,CHAR保留末尾空格

    关于二者的效率:

    • UPDATE时,CHAR的效率会高于VARCHAR的效率,因为VARCHAR是不定长的,当数据长度改变时,需要重新分配存储空间

    3.2 BLOB和TEXT

    BLOB和TEXT的唯一区别是BLOB保存二进制类型而且没有字符集好排序规则,而TEXT保存字符文本,且有字符集和排序规则

    它们的排序规则按照 max_short_length 规定长度的前若干个字符进行排序

    4.日期和时间类型

    DATETIME: 将日期保存为YYYYMMDDHHMMSS格式,范围从1001 ~ 9999年,占用空间 8 Byte

    TIMESTAMP: 将日期保存为Unix时间戳,范围从1970 ~ 2038年, 占用空间 4Byte,并且和时区相关,它的特性是当插入没有定义TIMESTAMP的列时,MySQL会自动将时间戳保存为当前时间,所以一般可用于记录最后登录时间等.

    5.位集数据类型

    BIT: 最大 64 bit,一般用于保存一个true/false值,如BIT(1),占用 1 bit,远小于使用字符表示

    SET: 用于保存多个true/false值,可用于权限管理,效果见下图

    6.枚举

    ENUM: 类似于SET,但是只能插入1个值,一般可用来表示性别等唯一且范围固定的属性(男,女..)

  • 相关阅读:
    Python3 函数return
    Python3 函数参数
    计算机组成原理基础
    解决 Python2 和 Python3 的共存问题
    管理本地用户和组
    Linux 常用命令(二)
    Linux 控制台
    Linux 常用命令(一)
    Linux中的目录功能(Red Hat 7)
    自定义属性使用
  • 原文地址:https://www.cnblogs.com/zemliu/p/2637346.html
Copyright © 2020-2023  润新知