Mysql常用数据类型

Mysql常用数据类型

数值类型
    Bit(M)                                位类型。M指定位数,默认值1,范围1-64    
    Bool,Boolean                  使用0或1表示真或假                                                                                 1个字节                         
    TinyInt [unsigned]              带符号是(-128,127)                      无符号(0,255)   默认是有符号         1 字节 
    SmallInt [unsigned]            带符号是(-32768,32767)                   无符号(0,65535)                         2 字节  
    MediumInt [unsigned]        带符号是(-8388608,8388607)             无符号(0,16777215)                 3 字节
    Int或Integer [unsigned]      带符号是(-2147483648,2147483647)       无符号(0,4 294967295)      4 字节 
    Float[(M,D)] [unsigned]      M指定显示长度,d指定小数位数,                                                              4 字节
    BigInt [unsigned]                带符号是  负的 2的63次方 到 2的63次方-1 ,无符号 2的64方  -1                8 字节 
    Double[(M,D)] [unsigned]   表示比float精度更大的小数,                                                                       8 字节
    Decimal(M,D) [unsigned]    定点数 M指定长度,D表示小数点的位数   大小:对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2  

  字符串类型
    Char                0-255字节                 定长字符串 
    Varchar            0-65535 字节             变长字符串   最大65532字节  【utf-8编码最大21844字符 1-3个字节用于记录大小】
    Tinyblob           0-255字节                 不超过 255 个字符的二进制字符串 
    Tinytext            0-255字节                 短文本字符串 
    Blob                 0-65 535字节             二进制形式的长文本数据 
    Text                  0-65 535字节             长文本数据 
    Mediumblob     0-16 777 215字节         二进制形式的中等长度文本数据 
    Mediumtext      0-16 777 215字节         中等长度文本数据 
    Longblob          0-4 294 967 295字节     二进制形式的极大文本数据 
    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                    YYYYMMDD HHMMSS         混合日期和时间值,时间戳 
                           结束时间是第 2147483647 秒,
                           北京时间 2038-1-19 11:14:07,
                           格林尼治时间 2038年1月19日 凌晨 03:14:07  
                           它可用于自动记录insert,update操作时间
                        
  String类型
    Enum  类型(枚举)    Enum是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。在某些情况下,ENUM值也可以为空字符串('')或NULL:
    Set   类型(集合)  Set是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。
                         这样SET成员值本身不能包含逗号。SET最多可以有64个不同的成员可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值

数值型(整数)的使用细节
    在mysql种,整型可以指定为有符合的,或者没有符号的,默认是有符号的
        我们可以通过指定来说明某个数值是否有符号       
        create table t10 (id int not null default 0); //默认是有符号的      not null:不为空   default 0:默认值为0
        create table t11 (id int unsigned not null default 0); 无符号的     unsigned:无符号
        
关于zerofill 的说明(前面自动填充0)
   在数据库定义是 int(6) 这个6到底表示什么意思?
   对于数值型(也可以是tinyint 等),我们这样定义时
   int(6) unsigned zerofill 
     /*①zerofill 只能和 unsinged 配合使用*/
     /*②6 表示当zerofill 时,填充的宽度,就是如果数据不足6位,则这个字段将被 0 填充,如果不设置zerofill ,则这个6没有什么含义 */
     /*③int(6) zerofill /*只要指定 zerofill 则 默认就是unsigned   */
     /*④6 并不是表示 存放的数不能超过6位,这点请注意*/
     
数值型Bin的使用
  Bin[M]
    位字段类型。M表示每个值的位数,范围为从1到64。如果M被省略,默认为1。
    细节说明
        1.bit字段在显示时,按Asci码对应的字符显示             
        2.查询的时候仍然可以用  注:查询显示asci显示,但是仍可以用0,1去筛选  select * from db_name where bit字段=0 or bit字段=1
        3.如果一个值只有0,1可以考虑用bit,可以节约空间
        4.位类型。M指定位数,默认指1,范围1-64

数值型(小数)的基本使用
  Float[(M,D)] [unsigned]
      M指定显示长度(一共显示的位数,包含小数位),d指定小数位数,占用空间4个字节
      小数:folat(4,2) 表示范围是-99.99~99.99
      float(4,2) unsigned:无符号  表示的范围 0-99.99
        细节:99.994可以存进去 99.995不能存进去
              超出设置的精度后,这里存的时候采用四舍五入的机制,四舍五入后不超出范围则可以存进去
      
  Decimal(M,D) [unsigned]       
      定点数 M指定长度(一共显示的位数,包含小数位),D表示小数点的位数    大小:对Decimal(M,D) ,如果M>D,为M+2否则为D+2  
      decimal(5,2)           表示的范围是  -999.99~999.99
      decaimal(5,2) unsigned 表示的范围是  0~999.99 
      
  关于Float和Decimal的区别,我们应该选择哪个数据类型
      Float[(M,D)] [unsigned]
        单精度浮点数精确到大约7位小数位   超过7位会导致小数点位会乱
      Decimal(M,D) [unsigned]   
          可以支持更加精确的小数位,压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。
          小数点和(负数)的负数‘-’符号不包括在M中。如果D是0,则值没有小数点或分数部分。
          Decimal整数最大位数(M)为65。支持的十进制数的最大位数(D)是30。如果D被省略, 默认是0。如果M被省略, 默认是10。
    建议:如果希望小数的精度高,推荐使用decimal

字符串的基本使用
    Char(size)    固定长度字符串 最大255 字符   注意这里指的是字符不是字节(字符中文英文都可以) 
                  当char值保存时,在他们的右边填充空格以达到指定的长度,当检索char值时,尾部的空格被删除掉,在存储或检索过程中不进行大小写转换
    Varchar(size) 可变长度字符串 最大65532字节  size大小和编码有关【1-3个字节用于记录大小】 size指的是字节
                  当Varchar值保存时不进行填充,当值保存和检索时尾部的空格仍保留,符合标准sql
                  utf-8编码最大65532/3=21844字符 utf8一个汉字占用3个字节
                  gbk编码最大65532/2=32766字符   gbk中一个汉字占用2个字节

  字符串使用细节1
    Char(4)  //这个4表示字符数(绝对最大255),不是字节数 ,不管是中文还是字母都是放四个,按字符计算.
    Varchar(4)//这个4表示字符数 ,不管是字母还是中文都以定义好的表的编码来存放数据.
    
  字符串使用细节2
    Char(4)    是定长,就是说,即使你 插入 'aa' , 也会占用 分配的4个字符.
    Varchar(4) 是变长,就是说,如果你插入了 'aa',实际占用空间大小是 L+1 
               [注:同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。]
  
  字符串使用细节3
    什么时候使用 char , 什么时候使用varchar
      答:如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等. 
      如果一个字段的长度是不确定,我们使用varchar ,比如留言,文章
      查询速度, char > varchar
  
  字符串使用细节4
    char 在存放空格时会丢失一定要小心, varchar不会丢失
    比如 在 char 中存放了 'aaa     '取出来就是 'aaa’'了
    而 varchar中存放了 ‘aaa    ’ ,取出来还是 ‘aaa   ’, 后面的那个空格没有丢失
    为什么,因为char的存放规则是当数据放入不够时,后面全面补 空格,这样就导致mysql数据库会误杀 你希望的空格,小心
  
  字符串使用细节5
    在存放文本时,也可以使用Text 数据类型.
    可以将TEXT列视为VARCHAR列, 注意 Text 不能有默认值.

  注:一个表的所有字段的长度全部加起来,不能超过65535个字节;

日期类型的基本使用
  CREATE TABLE birthday( t1 DATE, t2 DATETIME, t3 TimeStamp); timestamp时间戳
  mysql> INSERT INTO birthday (t1,t2) VALUES('2016-01-01','2016-01-01 12:12:12'); 

  日期类型的细节说明
    TimeStamp在Insert和update时,自动联动 (insert,update操作时间会自动修改TimeStamp类型)

Enum, SET类型基本使用
  基本语法
    enum('值1', '值2', ...) /*不能设置默认值*/ 
    set('值1', '值2',....) /*不能设置默认值*/
  
  enum枚举类型基本使用
    枚举类型,其实就是“单选”类型,对应网页表单中的“单选项”的数据值;
    形式:
      enum(‘选项值1’, ‘选项值2’, ‘选项值3’,...... );
      该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中的一个值;
      而且,出于效率的考虑,这些值实际存储的是“数字”,因为这些选项,每个选项值,依次对应如下数字:1, 2, 3, 4, 5, .......  最多65535个;
  
  SET类型基本使用
    就是“多选”类型,对应网页表单中的“多选项”的数据值
    形式:
      set(‘选项值1’, ‘选项值2’, ‘选项值3’,...... );
      该设定只是提供了若干个选项的值,最终一个单元格中,实际可存储了任何其中的多个值(就是多选);
      而且,出于效率的考虑,这些值实际存储的是“数字”,因为这些选项,每个选项值,依次对应如下数字:1, 2, 4,8, 16, 32, ......最多64个;[偶数]


    创建调查表
      create table voter(username varcher(60) not null default '',
      hobby set('苹果','菠萝','西瓜') not null,
      sex enum('男','女')  not null)charset=utf8 engine=myisam;
      insert into voter values('张三','菠萝,西瓜','男')
      insert into voter values('张三','6','1')
      select * from voter where sex='男'
      select * from voter where find_in_set('菠萝',hobby); 
      
  find_in_set 的使用  配合set使用
      select * find_in_set('a','a,b,c')
      find_in_set会返回第一个字符串在第二个字符串列表,隔开的位置[字符串列表],从1开始计算,如果没有则返回0
      第一个字符串不能包含,逗号,第二个字符串,逗号隔开,并且在第二个字符串时完全相同的元素才会返回位置

显示表的细节问题:此问题只针对cmd窗口显示mysql表数据
    如何在显示表有较长中文字符时,可以对其显示的技巧
        先将控制台的宽度设置大一点 比如 800宽
        登录的时候这样登录
        mysql --default-character-set=latin1 -uroot -pxxxx
        然后进入后再设置成  set names gbk 即可对其显示中文了. 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡老汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值