MySQL 教程 - 03 - 数据类型

整型

这里写图片描述
取值范围如果加了 unsigned, 则最大值翻倍,如 tinyint unsigned 的取值范围为(0~256).

浮点型

这里写图片描述

设一个字段定义为 float(5,3),如果插入一个数 123.45678, 实际数据库里存的是123.457,但总个数还是以实际为准,即 6 位。

定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

decimal(m,d) 参数 m<65 是总个数,d<30 且 d

字符型

这里写图片描述

char 和 varchar:
① char(n) 若存入字符数小于n, 则以空格补于其后, 查询之时再将空格去掉. 所以 char 类型存储的字符串末尾不能有空格, varchar 不限于此.
② char(n) 固定长度, char(4) 不管是存入几个字符, 都将占用4个字节,
varchar 是存入的实际字符数+1个字节(n<=255)或2个字节(n>255), 所以varchar(4),存入3个字符将占用4个字节。
③ char 类型的字符串检索速度要比 varchar 类型的快.

varchar 和 text:
① varchar 可指定n,text 不能指定,内部存储 varchar 是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
② text 类型不能有默认值.
③ varchar 可直接创建索引, text 创建索引要指定前多少个字符. varchar 查询速度快于 text, 在都创建索引的情况下, text 的索引似乎不起作用.

二进制数据 Blob

BLOB和_text存储方式不同, TEXT以文本方式存储,英文存储区分大小写,而 Blob 是以二进制方式存储,不分大小写。
BLOB存储的数据只能整体读出。
TEXT 可以指定字符集, BLOb 不用指定字符集.

日期时间类型

这里写图片描述

DATETIME       用于表示 年月日时分秒, 是 DATE 和 TIME 的组合, 并且记录的年份比较长久. 如果实际应用中有这样的需求, 就可以使用 DATETIME 类型.
TIMESTAMP    用于表示 年月日时分秒, 但是记录的年份比较短暂.
                        TIMESTAMP 和时区相关, 更能反映当前时间. 当插入日期时, 会先转换为本地时区后再存放, 当查询日期时, 会将日期转换为本地时区后再显示.
                        所以不同时区的人看到的同一时间是不一样的. 如果记录的日期需要让不同时区的人使用, 最好使用 TIMESTAMP.
DATE            用于表示 年月日, 如果实际应用值需要保存 年月日 就可以使用 DATE.  生日字段使用 Date 即可.
TIME             用于表示 时分秒, 如果实际应用值需要保存 时分秒 就可以使用 TIME.
YEAR             用于表示 年份, YEAR 有 2 位(最好使用4位)和 4 位格式的年. 默认是 4 位.
                     如果实际应用只保存年份, 那么用 1 bytes 保存 YEAR 类型完全可以. 不但能够节约存储空间, 还能提高表的操作效率.

一个表中至多只能有一个字段设置 CURRENT_TIMESTAMP.
CURRENT_TIMESTAMP 好像只适合 TIMESTAMP 类型的字段.
    -- 添加 create_time 字段, 设置默认时间 CURRENT_TIMESTAMP
    ALTER TABLE 表名
    ADD COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ;

    -- 修改 create_time 字段, 设置默认时间 CURRENT_TIMESTAMP
    ALTER TABLE 表名
    MODIFY COLUMN create_time datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ;

    -- 添加 UpdateTime 设置 默认时间 CURRENT_TIMESTAMP   设置更新时间为 ON UPDATE CURRENT_TIMESTAMP
    ALTER TABLE `table_name`
    ADD COLUMN `UpdateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间' ;

    --修改 UpdateTime 设置 默认时间 CURRENT_TIMESTAMP   设置更新时间为 ON UPDATE CURRENT_TIMESTAMP
    ALTER TABLE `table_name`
    MODIFY COLUMN `UpdateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间' ;

字段类型的选择原则

① 优先选择占空间小的类型.
② 对于字符型和数字型, 优先选择数字型.
③ 对于 char 和 varchar:
        ① 如果列中的数据长度差不多一致, 比如 : 省份证号, 学号等, 则应该考虑使用 char 类型.
        ② 如果列中的最大数据长度小于 50 Byte (15个字符左右), 则一般考虑使用 char.
④ 对于 decimal 和 float:
        ① 精确数据只能使用 decimal 类型.
        ② 非精确数据优先使用 float 类型, ( float 比 decimal 的存储空间小 )

以上原则主要是从以下角度考虑:
① 在对数据进行比较 ( 查询条件, JOIN 条件以及排序 ) 操作时, 同样的数据, 数字的处理比字符串快.
字符串的比较与当前的排序规则有关, 它需要去查询当前排序规则的字典顺序, 而数字不需要.
② 在数据库中, 数据的处理以页为单位 ( MySql 16K 每页 ), 列的长度越小, 每页显示的内容越多, 利于性能提升.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值