int型包括(tinyint, smallint, mediumint, int, bigint)

tinyint是1个字节表达范围就是2的8次方(-128-128) 或者(0-255) 很多人不明白为什么有两种情况,因为在计算机中有一种说法叫做无符号,也就是全部是正整数,所以在用MySQL 选择整形字段的时候一定要加上unsigned也就是无符号,因为负数基本不会用到。

smallint是2个字节表达范围2的16次方

smallint是3个字节表达范围2的24次方

int是4个字节表达范围2的32次方,记住这个类型是不能存储手机号的,很多人用它存然后直接报错了,因为int最长到10长度,手机号是11位,所以如果存手机号我的建议就是下面的char类型

bigint是8个字节表达方位就是2的64次方。

char型

表达范围0-255字节数,如果是存字母就是255个,因为每个字母只占一个字节,无论是什么编码,如果是存gbk存中文就是2个字节代表一个汉字,所以就是255/2,如果是utf8编码就是255/3,因为utf8编码下的中文占用三个字节代表一个汉字。正确的说应该叫做Unicode编码 又叫做万国码,他的实现有utf8

varchar型

表达范围是0-65535字节,我有一个长辈同事,年龄较大,他到现在还认为varchar最大是0-255,这是错误的,如果是在MySQL5.0.3 之前的版本是对的,后面的版本都已经改成了65535字节理论上存储汉字utf8就是2000多个。

text型

表达范围就是65535字节,一般用来存商品描述,等字符数比较多的等,它也有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,存储容量不同,含有字符集。

blob型

以二进制形式存储数据,是的可以存储图片。度出去依然是图片。

decimal型

DECIMAL列的声明语法是DECIMAL(M,D), M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254), D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M,一般用来存储money 也就是钱比如:decimal(10,2),他是以字符串形式存储数字的,不会引起存储的数据不正常,缺斤短两,存储精度需求高的最好选择这个字段,那些选择bigint类型存钱的 真不知道是怎么想的。应该是不知道有这个字段类型吧

float型

浮点型,也就是存小数,效果一般。

enum型

枚举类型,就是建字段的时候输入几个默认的字符,存储也只能存储这几个字符中的一个。例如:enum(“Y”,‘’N”);

set型

一个集合。可以有0到64个值,均来自于指定内容和enum类似,但是enum只能存储一个值,但是set可以存储多个值,如果用多个值用逗号隔开存储。

date型

存储日期格式:'YYYY-MM-DD',范围:'1000-01-01'到'9999-12-31'。

time型

存储时间格式:'HH:MM:SS';

datetime

其实就是date和time合起来,存储日期和时间格式:'YYYY-MM-DD HH:MM:SS',范围:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。

timestamp型(时间戳)

格式:'YYYYMMDDHHMMSS'、'YYMMDDHHMMSS'、'YYYYMMDD'、'YYMMDD',范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'。

一般存储时间还是用int型,存储时间戳

year型

存储年份的,格式”YYYY“;

下面我写点 我对建表的一些理解和建议:

建表的时候最好有主键id,主键是可以没有的,但是为了关联和查询快最好使用int型当做主键,记得是unsigned(无符号);

2、 我看看到很多人为了存储几十到几百的数字使用了,int(3) 这样的类型,其实这样做是不对的,因为只要是int就是占用4个字节,无论是存多少相当于多余出来的浪费了;

3、char和varchar一个是定长一个是可变长度,一般char存储手机号,密码定长加密过的,为什么不建议varchar,因为varvhar类型是变长,在搜索上会慢于char型,如果用户表的登录和密码 最好选择char这样效果会好很多,查询起来很快,其他的字段可以看情况选择varchar类型,告诉大家一个很多人不知道的东西例如:char(10)和varchar(10),都存储10个字符,varchar 会多占用一个字节,因为需要存储长度,计算机在搜索的时候定长的数据搜索起来会更快;

4、 能用定长的字段就用定长,能用更紧凑的类型就用更紧凑的类型。效果会好很多;

5、建表的时候字段要合理,不是多建在一个表里,也不是非得都拆开放,具体情况看使用场景;

6、建表的时候在最常where的字段加上索引,普通索引就够了,不过不一定,例如邮箱或者手机号,这些可以加一些唯一索引(uniqie) ,这样可以保证数据唯一,查询起来也更快;

7、 根据使用场景和业务,添加不同的索引,索引常用的有:主键索引,唯一索引,普通索引, 和全文索引。可以将多个字段放在一起建索引叫做,联合索引,例如我将用户名和密码加上索引了,其实这样不建议,因为搜索的时候,最好不要select * from table where username=”usename” and password=”password”,而是要select * from table where username=”username” ,查询出来后再将结果和password对比;

8、查询数据的时候能用主键,就用主键,这样查询MySQL不需要扫描表而是像人翻目录一样,立马找出来,其实MySQL所有的索引建立都是为了这个”目录“,能够在查询的时候立马找出来;

9、如果考虑到将来数据增长会很快,可以在建表的时候做好分表,比如评论表,可以根据一个hash算法,建立多个评论表,这样查询起来会好很多,其实无非就是将大块的数据,分散开,减少大面积的表扫描

mysql 字段的类型有哪些的更多相关文章

  1. 关于mysql字段时间类型timestamp默认值为当前时间问题

    今天把应用部署到AWS上发现后台修改内容提交后程序报错,经过排查发现是更新数据的时候,有张数据表中的一个timestamp类型的字段默认值变成了"0000-00-00 00:00:00.00 ...

  2. mysql 字段存储类型

    摘自:http://zuo.ai.xiao.blog.163.com/blog/static/6079155320121293750732/ 1.数字类型                        ...

  3. MySQL中int类型的字段使用like查询方法

    方法参考自: http://stackoverflow.com/questions/8422455/performing-a-like-comparison-on-an-int-field 也就是使用 ...

  4. 修改MySQL中字段的类型和长度

    MySQL修改字段类型的命令是: mysql> alter table 表名 modify column 字段名 类型; 假设在MySQL中有一个表为:address,有一个字段为city 初始 ...

  5. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...

  6. Mysql字段类型与合理选择

    字段类型 数值 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许 ...

  7. 关于Java读取mysql中date类型字段默认值'0000-00-00'的问题

    今天在做项目过程中,查询一个表中数据时总碰到这个问题:      java.sql.SQLException:Value '0000-00-00' can not be represented as ...

  8. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  9. 扩展mybatis和通用mapper,支持mysql的geometry类型字段

    因项目中需要用到地理位置信息的存储.查询.计算等,经过研究决定使用mysql(5.7版本)数据库的geometry类型字段来保存地理位置坐标,使用虚拟列(Virtual Generated Colum ...

随机推荐

  1. git config and options core.bare hard

    In Lynda course Building a Web Interface with React.js 003 Using the exercises > git clone --bare ...

  2. 搭建AVL树

    #include<iostream> using namespace std; struct TreeNode { int height; //每一个结点都要保存自己的高度 int dat ...

  3. 转:Delphi中destroy, free, freeAndNil, release用法和区别

    http://blog.sina.com.cn/s/blog_44fa172f0101cur1.html 1)destroy:虚方法 释放内存,在Tobject中声明为virtual,通常是在其子类中 ...

  4. jquery.cookie.js 的配置

    一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. ...

  5. 1bpp像素遍历(找了半天,感谢github)

    /// <summary> /// 获取比例 /// </summary> /// <param name="rect"></param& ...

  6. HTML URL编码参考(转载)

    URL编码(URL encoding)的作用是将字符转化为可在因特网上安全传输的格式.URL——统一资源定位符Web浏览器通过URL从Web服务器上请求页面.URL就是网页的地址,如:http://w ...

  7. 【转载】StringUtils方法介绍

    org.apache.commons.lang.StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供 的String类型操作方法的补充,并且是null安全的 ...

  8. 转:JMeter进行Java 请求测试

    本文转自:http://blog.csdn.net/xiazdong/article/details/7873767 向原作者致敬,看了他的文章才让我顺利解决了JMeter测试中的问题,万分感谢! 目 ...

  9. 转 s3c2440硬件学习----内存管理单元MMU

    本篇基本是韦东山书上的 一.内存管理单元MMU介绍 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.MMU使得每个用户进程拥有自己独立的地址空间,并通过内存访 ...

  10. 如何使用SecureCRT连接ubuntu

    1. 首先要明白什么是ssh? 可以把ssh看做是telnet的加强版,telnet的密码和信息都是不加密的,而ssh则加密. .2. 开启ubuntu上的ssh功能 先安装,安装后就自动开启了. s ...