一、选择原则

1.应该尽量使用可以正确存储数据的最小字段类型

2.选用简单的数据类型,例如:一个是尽量用mysql内置的字段类型来存储日期和时间;另一个存储IP地址尽量用整型;能用整型的尽量不用字符串类型

3.尽量避免使用NULL,例如:打算创建索引的字段,不要设置为NULL

二、常用的字段类型的选择说明

1.日期和时间类型

TIMESTAMP与DATETIME都可以存储相同类型的数据,并且精确到秒,可是TIMESTAMP只使用DATETIME一半的存储空间,并且它可以根据时区变化,具有特殊的自动更新能力。

存储空间:TIMESTAMP占用4个字节,DATETIME占用8个字节

mysql> select current_timestamp;
+---------------------+
| current_timestamp |
+---------------------+
| 2018-07-21 15:56:39 |
+---------------------+
1 row in set (0.00 sec)

这两个类型存储的数据格式类似:2018-07-21 15:56:39

将这个值转换成时间戳

mysql> select unix_timestamp('2018-07-21 15:56:39');
+---------------------------------------+
| unix_timestamp('2018-07-21 15:56:39') |
+---------------------------------------+
| 1532159799 |
+---------------------------------------+
1 row in set (0.00 sec)

将时间戳转换成标准时间

mysql> select from_unixtime('');
+-----------------------------+
| from_unixtime('') |
+-----------------------------+
| 2018-07-21 15:56:39.000000 |
+-----------------------------+
1 row in set (0.00 sec)

2.整数类型

tinyint(8bit), smallint(16bit), mediumint(24bit), int(32bit), bigint(64bit)

整数计算一般使用64位的bigint整数,一个细节需要注意的地方,INT(1)与INT(20)对于存储和计算来说宽度是相同的,对于INT型字段来说指定宽度是多余的

3.实数类型

浮点类型(float, double)与decimal类型在性能上,浮点类型更好一些,同样范围的值,浮点类型比decimal占用更少的空间

mysql创建表时字段类型选择与优化的更多相关文章

  1. MySQL 创建表时,设置时间字段自己主动插入当前时间

    MySQL 创建表时,设置时间字段自己主动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) N ...

  2. oracle与mysql创建表时的区别

    oracle创建表时,不支持在建表时同时增加字段注释.故采用以下方式: #创建表CREATE TABLE predict_data as ( id integer ), mid ), time dat ...

  3. mysql 创建表时注意事项

    mysql  创建表时注意事项 mysql 想必大家都不会陌生吧  是我学习中第一个接触的的数据库 已学习就很快上手的   这是一个关系型数据库  不懂什么是关系型数据库 啊哈哈哈  现在知道啦  因 ...

  4. MySQL创建表时加入的约束以及外键约束的的意义

    1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...

  5. mysql创建表时,设置timestamp DEFAULT NULL报错1067 - Invalid default value for 'updated_at'

    问题背景: 线上的linux服务器上的mysql服务器中导出数据库的结构.想要在本地创建一个测试版本 导出后再本地mysql上运行却报错   1067 - Invalid default value ...

  6. Mysql 创建表时错误:Tablespace for table `tablexx` exists. Please DISCARD the tablespace before IMPORT.

    在本地的一个数据库创建表时意外的出现了以下错误,说是表已经存在了 但通过desc 查看表信息时又说表不存在 在本地系统搜索表名却发现一个.ibd文件[InnoDB File] 在删除了该.ibd文件文 ...

  7. (转)mysql创建表时反引号的作用

    试用navicat工具查看现网mysql建表语句时,发现表名和字段名都是反引号引起来的 CREATE TABLE `tab_notice_title_tv` ( `i_id` int(11) NOT ...

  8. mysql创建表时反引号的作用

    试用navicat工具查看现网mysql建表语句时,发现表名和字段名都是反引号引起来的 CREATE TABLE `tab_notice_title_tv` ( `i_id` ) NOT NULL A ...

  9. Access sql语句创建表及字段类型

    创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NUL ...

随机推荐

  1. shell习题1

    1------->>>批量创建用户. $#  ---  统计传入参数的数量 $*  ---  传入若干个参数 使用id来确认用户是否存在并创建 向$*进行传参,在运行时加上需要添加的 ...

  2. android下JNI开发

    android下JNI开发 what 什么是JNI JNI java native interface native本地 java本地接口 通过JNI可以实现java和本地代码之间相互调用 jni可以 ...

  3. Leetcode之二分法专题-35. 搜索插入位置(Search Insert Position)

    Leetcode之二分法专题-35. 搜索插入位置(Search Insert Position) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会 ...

  4. Leetcode之回溯法专题-51. N皇后(N-Queens)

    Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...

  5. 《GO Home Trash!》UML类图,ER图以及数据库设计

    <Go Home Trash!>UML类图 ER图以及数据库中数据表 分析: 这款软件经过我们前期的讨论以及需求分析,确定了用户,客服以及管理员三个实体.在设计UML类图时,对各个实体之间 ...

  6. hdu-6701 Make Rounddog Happy

    题目链接 Make Rounddog Happy Problem Description Rounddog always has an array a1,a2,⋯,an in his right po ...

  7. CodeForces-714B-Filya and Homework+思路

    Filya and Homework 题意: 给定一串数字,任选一个数a,把若干个数加上a,把若干个数减去a,能否使得数列全部相同: 思路: 我开始就想找出平均数,以为只有和偶数的可以,结果wa在 1 ...

  8. CF - 1108 E 枚举上界+线段树维护

    题目传送门 枚举每个点作为最大值的那个点.然后既然是作为最大值出现的话,那么这个点就是不需要被减去的,因为如果最小值也在这个区间内的话,2者都减去1,对答案没有影响,如果是最小值不出现在这个区间内的话 ...

  9. Gym 101470 题解

    A:Banks 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt&q ...

  10. Numbers That Count POJ - 1016

    "Kronecker's Knumbers" is a little company that manufactures plastic digits for use in sig ...