由于工作的公司没有专业的DBA又经常需要建立各种各种的表来满足自己的业务逻辑,所以经常查看MySQL 手册或者谷歌查看相关资料,所以本人就根据我的工作经验和相关资料来介绍一下MySQL各种字段类型及其使用。(由于本人还算是菜鸟哪里写的不对请多多指正,有兴趣的可以探讨一下)

MySQL字段类型

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“;

好了就介绍这些,我用的比较多的吧,还有一些大同小异,如果需要特殊的看看MySQL手册 ,基本上就差不多了。

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

1、建表的时候最好有主键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建表和优化需要写出来,由于时间的问题暂时先写这些,以后有时间再继续。

MySQL 常用字段类型,介绍及其建表使用方法经验分享的更多相关文章

  1. MySQL的字段属性+SQLyog查看建表语句

    MySQL的字段属性 写在前面:数据库就是单纯的表,用来存储数据,只有行和列.行代表数据,列代表字段(id.name.age这种就叫字段) 1.长度 2.默认 3.主键 4.非空 5.Unsigned ...

  2. MySQL 常用字段类型与对应的Java类型

    varchar 不定长字符串 字符串或是没有合适类型时,可以选择它作为字段类型 对应Java中的String int bigint 数值 一般以int作为数字的默认选择,数值很大时使用bigint 对 ...

  3. mysql 常用字段类型

    tinyint[(m)] [unsigned] [zerofill] 1字节 极小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 - 127. 无符号: - 255 特别的: My ...

  4. MySQL 字段类型介绍

    MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...

  5. Django中的常用字段类型与参数

    Django中的常用字段类型 1. 数值型 以下都是数值相关的,比如AutoField,它在MySQL中的类型为int(11),而BooleanField在MySQL中对应的类型是tinyint(1) ...

  6. Oracle与mysql的字段类型整理

    Oralce的字段类型整理如下: Mysql的字段类型整理如下: 最后面一栏是对应JAVA的基本类型.希望对初学者有用,初学者在学习JAVA的时候,不知道怎么把JAVA的对象指向到ORALCE或者MY ...

  7. SQL常用字段类型

    中文常用字段类型 1.   名称类    nvarchar(10) 2.   数量       int 3.   时间      date 4.   货币      money 5.   编号     ...

  8. PDO 查询mysql返回字段整型变为String型解决方法

    PDO 查询mysql返回字段整型变为String型解决方法 使用PDO查询mysql数据库时,执行prepare,execute后,返回的字段数据全都变为字符型. 例如id在数据库中是Int的,查询 ...

  9. MySQL 常见索引类型介绍

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL 主要索引类型有如下几种: 1.主键索引 2.唯一索引 3.普通索引 4.空间索引 5.全文索引 假设有如下一张 ...

随机推荐

  1. C语言--位运算符

    一.位运算符 1.按位与:& 1> 功能 * 只有对应的两个二进制位为1时,结果位才为1,否则为0 * 举例:10用二进制表示为1010,  7用二进制表示为0111.对两个数值进行&a ...

  2. hdu 1255 覆盖的面积

    http://acm.hdu.edu.cn/showproblem.php?pid=1255 #include <cstdio> #include <cstring> #inc ...

  3. mysql/Java服务端对emoji的支持

    更改好后的字符集: 乱码 推荐大家看 深入MySQL字符集设置 ,区分检查client端.server端的编码:最简单暴力的方式,是在所有的环节都显式明确的指定相同的编码. 比如使用python的My ...

  4. logstash 内置匹配IP

    10.252.142.174 - - [06/Sep/2016:08:41:36 +0800] "GET /api/validate/code/send?mobilePhone=186522 ...

  5. Gym 100570E : Palindrome Query

    De Prezer loves palindrome strings. A string s1s2...sn is palindrome if and only if it is equal to i ...

  6. 关于UIButton中的ContentEdgeInsets的深入研究

    UIButton的contentEdgeInsets属性的深入研究 由于用UIButton这个属性做过一些东西,但是对它的规律始终不太了解,虽然苹果官方文档的解释大体上可以理解为,这个属性设置的是内边 ...

  7. 十分钟搭建自己的hadoop2/CDH4集群

    版本及准备 我部署的是hadoop-2.0.0-cdh4.2.0.tar.gz,下载地址为http://archive.cloudera.com/cdh4/cdh/4/hadoop-2.0.0-cdh ...

  8. Linux权限管理(笔记)

    权限管理:r: w:x: 三类用户:u: 属主g: 属组o: 其它用户 chown: 改变文件属主(只有管理员可以使用此命令)# chown USERNAME file,...    -R: 修改目录 ...

  9. JAX-WS 可运行项目

    该项目是通过JAX-WS实现的WebService服务,其中包括了1.关于最简单的WebService服务的创建2.关于文件交互的WebService的创建 代码中包括了服务端代码和客户端代码(客户端 ...

  10. Jndi and c3p0 in Tomcat

    Tomcat 中Jndi是使用Tomcat自带的连接池抛弃Tomcat自带的连接池.使用c3p0 . 环境:Tomcat 5.5.20下面配置只适合Tomcat 5.5.X 下面来看Jndi 与 c3 ...