面试官问:mysql中时间日期类型和字符串类型的选择
摘要:MySQL中有多种表示时间日期的数据类型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等
本文分享自华为云社区《一针见血,mysql中时间日期类型和字符串类型的选择》,作者:香菜聊游戏。
1、DATETIME、TIMESTAMP 的用法
MySQL中有多种表示时间日期的数据类型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等
1、相同点
datetime和timestamp都可以表示 YYYY-MM-DD HH:MM:SS 这种年月日时分秒格式的数据。
2、不同点
datetime存储与时区无关(准备来说是datetime只支持一个时区,就是存储时当前服务器的时区),而timestamp存储的是与时区有关。
datetime、timestamp精确度都是秒,datetime与时区无关,存储的范围广(1001-9999),timestamp与时区有关,存储的范围小(1970-2038)。
3、选择
TIMESTAMP和DATETIME除了存储范围和存储方式不一样,没有太大区别。当然,对于跨时区的业务,TIMESTAMP更为合适。
2、varchar 和 text 数据类型的用法
mysql在存储字符串时, 可以使用char、varchar或者text类型
1、相同点
varchar 和 text 都可以存储变长字符串且 字符串长度上限为65535字节
2、不同点
varchar 速度快,不存在空间浪费,不处理尾部空格,上限为65535字节,但是有存储长度实际65532字节最大可用。255字节以下用1字节存储长度,255字节以上用2字节存储长度。 text,存变长大数据,速度慢,不存在空间浪费,不处理尾部空格,上限65535字节,会用额外空间存放数据长度,顾可以全部使用65535字节。
不能在TEXT列上放置索引(全文索引除外),对于text来说,只能添加前缀索引,并且前缀索引最大只能达到1000字节
text没有默认值
当varchar大于某些数值的时候,其会自动转换为text,大概规则如下:
大于varchar(255)变为 tinytext
大于varchar(500)变为 text
大于varchar(20000)变为 mediumtext
3、选择
1、经常变化的字段用varchar;
2、知道固定长度的用char;
3、超过255字节的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;
6、存储引擎对于选择 CHAR 和 VARCHAR 的影响:
- 对于 MyISAM 存储引擎,最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。
- 对于InnoDB存储引擎,最好使用可变长度的数据列,因为 InnoDB 数据表的存储格式不分固定长度和可变长度,因此使用 CHAR 不一定比使用 VARCHAR 更好,但由于 VARCHAR 是按照实际的长度存储,比较节省空间,所以对磁盘 I/O 和数据存储总量比较好。
相关文章
- 面试官问我MySQL调优,我真的是
- mysql特定字段读
- 和面试官聊了半小时的MySQL索引。
- 【MySQL进阶-09】深入理解mysql执行的底层机制
- 【数据库】Mysql表字段转Java实体(sql语句)
- JDBC 连接 MySQL 异常:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not allowed
- 转 MySQL权限管理
- 原来用 MySQL 也可以做全文检索
- Kubernetes(k8s)中Service代理容器外服务(Mysql、Redis、MongoDB)
- mysql根据查询结果,创建表
- mysql skip-grant-tables 后要多次重启 和验证登录检查确认密码生效
- mysql cte
- (3.12)mysql基础深入——mysql日志文件/其他文件(socket/pid/表结构/Innodb)
- mysql的读写分离配置
- MySQL之数据库和表的基本操作(建立表、删除表、向表中添加字段)
- centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记
- Mysql自增ID起始值修改
- python封装一个工具类 ,对MySQL数据库增删改查,可多字段动态插入mysql数据库中
- 面试官:MySQL索引底层数据结构原理与性能调优,你能回答多少?