mysql储存时间选择怎样的字段类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql储存时间选择怎样的字段类型相关的知识,希望对你有一定的参考价值。

参考技术A 储存时间,常用的有三个选择datetime、timestamp、int。昨夜同事问到了,于是今天就总结一下自己的理解。插入效率:datetime
>
timestamp
>
int读取效率:int
>
timestamp
>
datetime储存空间:datetime
>
timestamp
=
int具体上面的实验数据可以看这篇文章。
建立索引的体积,和索引的速度,你懂的。
让我们来看一个应用场景:
看下这张图,第一我们需要设置系统的默认时区,第二我们也需要提供不同时区时间显示的需要。于是,我们分别使用datetime、timestamp、int字段类型来看下:使用datetime直接显示时间,这是个不错的选择,但是如果考虑到时区,很明显计算上的麻烦。使用timestampOK,这个很好,可以根据系统的时区来自动输出时间,但是单个用户要定制自己的时区呢?再者你不怕麻烦,在程序里面实现了这个计算,服务器若是换个地方,改了下时区,你程序里面计算单个用户当地时间的代码怎么办(timestamp出来的时间会根据时区的变化而变化,在某些情况下是不错的选择,但在某些情况下,真的很鸡肋)。使用int从上面两个类型的缺点看来,貌似这个类型可以解决以上的问题,其实我们只要存格林时间的unix
timestamp就好了,时区时间的计算上也很方便,读取的效率也不错。我觉得用这个储存的缺点呢,就是直接select的时候时间不能直观的显示出来。看看其他开源程序是怎么做的discuz,
typecho,
emlog等等等等,他们都选用int了,这一定有他们的道理,我想也没什么可以多说的了。

MySQL的数据类型 及注意事项

MySQL的数据类型

注意  

选择合适的数据类型,能节省储存空间,提升计算性能。
(1)在符合应用要求(取值范围、精度)的前提下,尽量使用“短”数据类型
(2)数据类型越简单越好。
(3)在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间。
(4)尽量采用精确小数类型(例如decimal),而不采用浮点数类型。
(5)尽量避免NULL字段,建议将字段指定为NOT NULL约束。

技术图片

 

 

 

 

  • 数值类型

    整数类型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节

(-9223372036854775808,9223372036854775 807)

(0,18 446 744 073
709 551 615)

极大整数值

    小数类型

类型 大小 范围(有符号) 范围(无符号) 用途
FLOAT 4 字节

-3.402 823 466 E+38
~-1.175 494 351 E-38

0和1.175 494 351 E-38
~3.402 823 466 E+38

单精度
浮点数

DOUBLE 8 字节

-1.797 693 134 862 315 7 E+308
~-2.225 073 858 507 201 4 E-308)

0和2.225 073 858 507 201 4 E-
308~1.797 693 134 862 315 7
E+308

 
 

双精度
浮点数

DECIMAL

DECIMAL
(length,
precision)

length决定小数的最大位数
precision用于设置小数位数

length决定小数的最大位数
precision用于设置小数位数

 小数值

                          备注:decimal(length, precision)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定该小数的最大位数,precision用于设置精度(小数点后数字的位数)。
                             例如:decimal (5,2)表示小数取值范围:-999.99~999.99 decimal (5,0)表示: -99999~99999的整数。

 

 

字符串类型

类型 大小 用途
CHAR(n) 0-255字节 定长字符串
VARCHAR(n) 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

日期/时间类型

类型

大小(字节)

范围 格式 用途
DATE 3

‘1000-01-01’~’9999-12-31’

YYYY-MM-DD 日期值
TIME 3

‘-838:59:59‘~‘838:59:59‘

HH:MM:SS

时间值或持续时间

YEAR 1 ‘1901’~’2155’ YYYY 年份值
DATETIME 8

‘1000-01-01 00:00:00’
~’9999-12-31 23:59:59’

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP 4

‘1970-01-01 00:00:00’~’2038’

YYYY-MM-DD HH:MM:SS

混合日期和时间值,
时间戳

复合类型

类型 最大值 说 明 示例
Enum (“value1”, “value2”, …) 65535

该类型的列只可以容纳所列值之一或为NULL

Gender enum(‘男‘,‘女)

Set (“value1”, “value2”, …) 64

该类型的列可以容纳一组值或为NULL

Interest set(‘唱歌‘,‘游泳‘,‘网球’)

二进制类型

类型 大小 用途
Binary(n) 0-255字节 较短的二进制
VARBinary(n) 0-65535 字节 较长的二进制
Bit(n) 0-64字节 短二进制
TINYBLOB 0-255字节 较短的二进制
TINYBLOB 0-255字节 较短的二进制
BLOB 0-65 535字节 图片、声音等文件
MEDIUMBLOB 0-16 777 215字节 图片、声音、视频等文件
LONGBLOB 0-4 294 967 295字节 图片、声音、视频等文件

 

以上是关于mysql储存时间选择怎样的字段类型的主要内容,如果未能解决你的问题,请参考以下文章

mysql建立字段选择类型。

怎样设置mysql中的数据字段为默认值

mysql建表时怎样设置datetime类型的字段默认值为不自动更新的系统当前时间

Mysql—常用数据类型的深入理解以及数据类型的选择优化

mysql怎样修改字段值,详细

mysql怎样修改字段值,详细