VARCHAR和CHAR类型 VARCHAR类型 1、VARCHAR和CHAR是两种最重要的字符串类型。...4、由于MySQL把每个枚举值都保存为整数,并且必须进行查找才能转换为字符串,所以枚举列有一些开销,通常枚举列都比较小,所以开销还可以控制,在特定情况下,把CHAR/VARCHAR列与枚举列进行关联可能会直接比关联...3、MySQL提供了FROM_UNIXTIME()函数把UNIX时间戳转换为日期,提供了UNIX_TIMESTAMP()函数把日期转换为Unix时间戳。...MySQL schema设计中的陷阱 1、太多的列。MySQL的存储引擎API工作时需要在服务层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。...从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的。MyISAM的定长行结构实际上与服务器层的行结构正好匹配,所以不需要转换。
datatype - 要将表达式转换为的数据类型。 format - 可选-指定日期和时间格式的整数代码,用于在日期/时间/时间戳数据类型和字符数据类型之间进行转换。...描述 这里描述了CONVERT函数的两种不同实现。 两者都将一种数据类型中的表达式转换为另一种数据类型中的相应值。 两者都执行日期和时间转换。...该格式既可用于定义从日期/时间/时间戳数据类型转换为字符串时的输出,也可用于定义从字符串转换为日期/时间/时间戳数据类型时的输入。...支持以下格式代码; 输出两位数年份的格式代码列在第一列; 输出四位数年或不输出年的格式列在第二列: Two-digit year codes Four-digit year codes Format...在转换为SQL_VARCHAR时,日期和时间被转换为相应的ODBC表示; 数字数据类型值转换为字符串表示。
日期和时间函数 函数类型 日期和时间函数主要是包含: 日期函数 时间函数 区间函数 时序补全函数 日期时间类型 时间戳类型unixtime:以int类型表示从1970年1月1日开始的秒数,例如1512374067...,如在日期中添加或减去指定的时间间隔、计算两个日期之间的时间 date_add(unit, value, timestamp):在timestamp的基础上加上value个unit;如果value是负值...函数格式 在查询中将某一列(字段)或某一个值转换成指定类型。其中,如果某一个值转换失败,将终止整个查询。...cast([key|value] as type) 在查询中将某一列(字段)或某一个值转换成指定类型。如果某一个值转换失败,该值返回NULL,并跳过该值继续处理。...mysql中目前没有full join功能 unnest语法 背景 在复杂的业务场景下,日志数据的某一列可能会是较为复杂的格式,例如数组(array)、对象(map)、JSON等格式。
一、数据类型简介 数据表由多列字段构成,每一个字段指定了不同的数据类型,指定了数据类型之后,也就决定了向字段插入的数据内容; 不同的数据类型也决定了 MySQL 在存储它们的时候使用的方式,以及在使用它们的时候选择什么运算符号进行运算...MySQL中默认的日期格式是yyyy-mm-dd; 用MySQL的内建类型DATE、TIME、DATETIME来存储时间,而不是使用字符串; 当数据格式为TIMESTAMP和DATETIME时,可以用CURRENT_TIMESTAMP...'1999-09-09'),(990909),(19990909); # 插入不同格式的日期 插入的结果如下: ?...,其包含的字符个数最大为 4,当检索到 CHAR 值时,尾部的空格将被删掉; VARCHAR(M) 为可变长度的字符串,M 表示最大列长度,取值范围是 0~65535 ,VARCHAR 的最大实际长度由最长的行的大小和使用的字符集确定...6、BINARY 和 VARBINARY BINARY 和 VARBINARY 类型类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字节字符串; BINARY 类型的长度是固定的,指定长度之后
对于DECIMAL列,可以指定小数点前后所允许的最大位数,则会影响列的空间消耗。DECIMAL只是一种存储格式,在计算中DECIMAL会转换为DOUBLE类型。...它把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。 TIMESTAMP只使用了4个字节的存储空间。...MySQL提供了FROM_UNIXTIME()函数把Unix时间转换为日期,并提供UNIX_TIMESTAMP()函数把日期转换为Unix的时间戳。TIMESTAMP显示的值也依赖于市区。...数据类型 大小 格式 说明 date 3字节 YYYY-MM-DD 日期值 datetime 8字节 YYYY-MM-DD HH:MM:SS 时间和日期值 timestamp 4字节 YYYYMMDDHHMMSS...时间戳 MySQL schema设计中的陷阱 太多的列:MySQL的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。
DATE_FORMAT()函数将日期格式化为指定的格式,这里将当前日期和时间格式化为YYYY-MM-DD HH:MM:SS的形式。 字符串类型 字符串类型用于存储文本数据。...然而,在大多数情况下,这种性能差异是微不足道的。 字符集:在选择VARCHAR类型时,需要考虑字符集的设置。不同的字符集可能会影响字符串的存储方式和长度计算。...这与CHAR和VARCHAR类型在比较时不区分大小写(除非使用了BINARY关键字)的行为不同。 固定与可变长度:BINARY是固定长度的,而VARBINARY是可变长度的。...-- 在实际应用中,可能需要将二进制数据转换为可显示的格式(如十六进制字符串)或进行其他处理。 -- 这里我们使用DATA_LENGTH函数来显示二进制数据的长度。...这与CHAR和VARCHAR类型在比较时不区分大小写(除非使用了BINARY关键字)的行为不同。 字符集和排序规则:二进制字符串类型不使用字符集和排序规则,因此在处理非文本数据时特别有用。
如果查询中包含可为NULL的列,对MySQL来说更难优化,因为可为NULL的列使得索引、索引统计和值比较都更复杂。可为NULL的列会使用更多的存储空间,在MySQL里也需要特殊处理。...但是MySQL也可以使用微秒级的粒度进行临时运算,我们会展示怎么绕开这种存储限制。 MySQL 提供两种相似的日期类型,DATETIME 和 TIMESTAMP。...它把日期和时间封装到格式为YYYYMMDDHHMMSS的整数中,与时区无关。使用8个字节的存储空间。...如果需要存储比秒更小粒度的日期和时间值,可以使用BIGINT类型存储微秒级别的时间截,或者使用DOUBLE存储秒之后的小数部分。这两种方式都可以,或者也可以使用MariaDB替代MySQL。...太多的列 MySQL的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的。
DATE 日期类型用于具有日期部分但没有时间部分的值。MySQL以'YYYY-MM-DD'格式检索并显示日期值,支持的范围是'1000-01-01' 到 '9999-12-31'。...CHAR和VARCHAR类型相似,但它们被存储和检索的方式不同。它们的最大长度和尾部空格是否保留也不同。 CHAR列长度可以是0到255之间的任何值。CHAR 存储值时,它们将空格填充到指定的长度。...VARCHAR列中的 值是可变长度的字符串。长度可以指定为0到65535之间的值。 与CHAR不同,VARCHAR会存储一个长度为1字节或2字节的前缀,用于存储长度值,用以表明存储的字节数。...使用磁盘会导致性能损失,因此只有在确实需要时才在查询结果中包含 BLOB或TEXT列。例如,避免使用 SELECT *,它会选择所有列。...截止MySQL5.7唯一的例外情况是,你可以设置日期类型的列默认值为:CURRENT_TIMESTAMP。
存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。...TIMESTAMP 与 DATETIME的区别 TIMESTAMP存储空间比较小,表示的日期时间范围也比较小 底层存储方式不同,TIMESTAMP底层存储的是毫秒值,距离1970-1-1 0:0:0 0...两个日期比较大小或日期计算时,TIMESTAMP更方便、更快。 TIMESTAMP和时区有关。TIMESTAMP会根据用户的时区不同,显示不同的结果。...当SET类型包含的成员个数不同时,其所占用的存储空间也是不同的,具体如下: SET类型在存储数据时成员个数越多,其占用的存储空间越大。...在某些环境中,如果把这些数据列移动到第二张数据表中,可以让你把原数据表中的数据列转换为固定长度的数据行格式,那么它就是有意义的。这会 减少主表中的碎片 ,使你得到固定长度数据行的性能优势。
VARCHAR(size) 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。...可以按照此格式输入可能的值: ENUM('X','Y','Z') SET 与 ENUM 类似,不同的是,SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择。...2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 *即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。...在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。...TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
在存储时,首先会按照行数进行切分,切分为不同的数据块进行存储,也就是行存储;在每一个数据块中,存储时使用的又是列式存储,将表的每一列数据存放在一起。...这里对压缩方式,仅做简单的了解即可。 数据类型 基本数据类型 数值型 Hive数值型包含整数、浮点数两种。...--将float类型的123.5转换为decimal类型 select CAST(123.56 AS DECIMAL(4,1)); > 123.5 小数部分超出指定长度后,会被四舍五入截取,相当于精度截取...select CAST('123456789.1234567' AS DECIMAL(20,5)); 123456789.12346 字符型 Hive字符型包含可变长度字符串、固定长度字符串两种。...Date类型在0.12.0后支持,格式为YYYY-MM-DD,可以表示从0000-01-01到9999-12-31的日期。
今天就把大家常用的SQL语言做一个总结,来看看他们在日期时间处理方面的差异。...presto:select cast(to_unixtime( cast ( create_time as timestamp)) as bigint) from table1; --需要注意的地方,首先...presto这里的转换使用起来比较麻烦,需要to_unixtime和timestamp结合起来使用才行。...,如果不是标准的日期时间格式先转为日期时间格式即可。...:ss") from table1; --两种方式均可,建议使用第一种更为简洁,返回的是标准的秒级粒度的日期时间。
,以及在使用数据的时候选择什么运算符进行运算; (3)数值数据类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL (4)日期/...1999 (4) 格式:YY-MM-DD 或 YYMMDD ,数字格式表示的日期,其中 YY 范围为 00 ~ 99 ,其中,00 ~ 69 被转换为 2000 ~ 2069 ,70 ~ 99 被转换为...2.2日期和时间类型; (1)如果只需要记录年末,用YEAR类型:如果只需要记录时间,用TIME类型; (2)如果同时记录日期和时间可以使用DATETIME或者是TIMESTAMP这两种类型; TIMESTAMP...的取值范围小于DATETIME; (3)默认情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL默认会把TIMESTAMP列设为当前时间 3.字符串; 3.1 CHAR和VARCHAR...3.3BINARY(M)和VARBINARY(M) (1)BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是他们包含二进制字符串; (2)BINARY类型的长度是固定的,指定长度后
整形类型 整型类型中,按照取值范围和存储方式不同,分为tinyint,smallint,mediumint,int和bigInt这五个类型。...可按下列任何一种方式定义AUTO_INCREMENT列: ? ? 浮点型 对于小数的表示,MySQL分为两种方式:浮点数和定点数。...TIMESTAMP值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为19个字符,如果想要获得数字值,应在TIMESTAMP列添加+“0”。...TIMESTAMP还有一个重要特点,就是和时区相关,当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。...做一个测试,来说明如何采用不同的格式将日期“2018-01-17 10:16:20”插入到DATETIME列中。 ?
,以及在使用数据的时候选择什么运算符进行运算; (3)数值数据类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL (4)日期/...‘00’ ~ ‘69’ 被转换为 2000 ~ 2069 ,‘70’ ~ ‘99’ 被转换为 1970 ~ 1999 (4) 格式:YY-MM-DD 或 YYMMDD ,数字格式表示的日期,其中 YY...2.2日期和时间类型; (1)如果只需要记录年末,用YEAR类型:如果只需要记录时间,用TIME类型; (2)如果同时记录日期和时间可以使用DATETIME或者是TIMESTAMP这两种类型; TIMESTAMP...的取值范围小于DATETIME; (3)默认情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL默认会把TIMESTAMP列设为当前时间 3.字符串; 3.1 CHAR和VARCHAR...BIT的二进制 3.3BINARY(M)和VARBINARY(M) (1)BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是他们包含二进制字符串; (2)BINARY
8个字节 ---- 从表可知,不同类型整数存储所需的字节数是不同的,占用字节数最小的是TINYINT类型,占用字节最大的是BIGINT类型,相应的占用字节越多的类型所能表示的数值范围越大。...下表列出了MySQL日期/时间类型: 类型名称 日期格式 日期范围 存储需求 YEAR YYYY 1901~2155 1字节 TIME HH:MM:SS -838:59:59~838:59:59 3...由于TIMESTAMP这个列取值时范围小于DATETIME的取值范围,因此存储范围较大的日期最好使用DATETIME。 TIMESTAMP也有一个DATETIME不具备的属性。...默认情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。...对于InnoDB存储引擎:使用可变长的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用CHAR不一定比使用VARCHAR更好,但由于VARCHAR是按照实际存的长度存储,比较节省空间
(在Display模式中包含适当数量的尾随零,但在Logical模式和ODBC模式中被截断。) 如果指定s=0,数值将四舍五入为整数。 如果指定s=-1,数值将被截断为整数。...在嵌入式SQL中,此强制转换作为相应的$HOROLOG日期整数返回。无效的ODBC日期或非数字字符串在转换为日期时在逻辑模式下表示为0;日期0显示为1840-12-31。...TIMESTAMP:由有效日期和时间、有效日期或有效时间组成的字符串可以转换为TIMESTAMP。 日期部分可以采用多种格式。 缺少的日期部分默认为1841-01-01。...缺少的时间段默认为00:00:00。 缺少前导零将添加到月和日。 小数秒(如果指定了)可以在句点(.)或冒号(:)之前加上。 这些符号有不同的含义。...将日期转换为TIMESTAMP、DATETIME或SMALLDATETIME数据类型将返回一个格式为YYYY-MM-DD hh:mm:ss的时间戳。
精确数值型 精确数值型包括decimal 和 numeric两类,这两种数据类 型在SQL Server中,在功能上是完全等价的。...●varchar[(n)] 可变长度字符数据类型,其中n的规定与定长字符数据类型char[(n)]中n完全相同,与char[(n)]不同的是 varchar(n) 数据类型的存储空间随列值的字符数而变化...例如,表中某列的数据类型为varchar(100),而输入的字符串为” NewYear2013″,则存储的字符NewYear2013的长度为11字节,其后不添加空格,因而varchar(n) 数据类型可以节省存储空间...,特别在列值的字符数显著不同时。...时间戳型 反映系统对该记录修改的相对(相对于其他记录)顺序,标识符是timestamp,timestamp类型数据的值是二进制格式数据,其长度为8字节。
日期时间类型 MySQL数据类型 含义 date 日期 ‘2008-12-2’ time 时间 ‘12:25:36’ datetime 日期时间 ‘2008-12-2 22:06:44’ timestamp...含义 NULL 数据列可包含NULL值 NOT NULL 数据列不允许包含NULL值 DEFAULT 默认值 PRIMARY KEY 主键 AUTO_INCREMENT 自动递增,适用于整数类型 UNSIGNED...Date 3 以YYYY-MM-DD的格式显示,比如:2009-07-19 Date Time 8 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 TimeStamp...Set 可达8 最大可达64个不同的值 使用建议 在指定数据类型的时候一般是采用从小原则,比如能用TINY INT的最好就不用INT,能用FLOAT类型的就不用DOUBLE类型,这样会对MYSQL在运行效率上提高很大...对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列简单。
04 数据类型 创建表的时候,我们在类型这里给出了不同的选项,比如有int ,varchar。数据类型不同,储存的内容也不相同。...日期时间类型 MySQL数据类型 含义 date 日期 '2008-12-2' time 时间 '12:25:36' datetime 日期时间 '2008-12-2 22:06:44' timestamp...含义 NULL 数据列可包含NULL值 NOT NULL 数据列不允许包含NULL值 DEFAULT 默认值 PRIMARY KEY 主键 AUTO_INCREMENT 自动递增,适用于整数类型 UNSIGNED...Date 3 以YYYY-MM-DD的格式显示,比如:2009-07-19 Date Time 8 以YYYY-MM-DD HH:MM:SS的格式显示,比如:2009-07-19 11:22:30 TimeStamp...对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列简单。
领取专属 10元无门槛券
手把手带您无忧上云