• [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】


    你看到的这个文章来自于http://www.cnblogs.com/ayanmw

    转载自:http://blog.csdn.net/daydreamingboy/article/details/6310907

    分析MySQL数据类型的长度

          MySQL有几种数据类型可以限制类型的"长度",有CHAR(Length)、VARCHAR(Length)、TINYINT(Length)、SMALLINT(Length)、MEDIUMINT(Length)、INT(Length)、BIGINT(Length)、FLOAT(Length, Decimals)、DOUBLE(Length, Decimals)和DECIMAL(Length, Decimals)。

          然而,这些数据类型的长度,并不是都指数据的大小。具体说就是:
    (1)CHAR、VARCAHR的长度是指字符的长度,例如CHAR[3]则只能放字符串"123",如果插入数据"1234",则从高位截取,变为"123"。 VARCAHR同理。

    (2)TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT的长度,其实和数据的大小无关!Length指的是显示宽度,举个例子:

    复制代码
    mysql> create table test(id int(3) zerofill);
    Query OK, 0 rows affected (0.09 sec)
    
    mysql> insert into test(id) values(1),(1234);
    Query OK, 2 rows affected (0.06 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from test;
    +------+
    | id   |
    +------+
    |  001 |
    | 1234 |
    +------+
    2 rows in set (0.00 sec)
    复制代码

    可以看出,id的显示宽度为3,不足的左边补0,数据长度超过的则原样输出。如果没有zerofill,则看不出显示宽度,没有前导零。

    (3)FLOAT、DOUBLE和DECIMAL的长度指的是全部数位(包括小数点后面的),例如DECIMAL(4,1)指的是全部位数为4,小数点后1位,如果插入1234,则查询的数据是999.9。过程如下

    复制代码
    mysql> alter table test add realnum decimal(4,1);
    Query OK, 2 rows affected (0.03 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> insert into test(id,realnum) values(2,1234);
    Query OK, 1 row affected, 1 warning (0.05 sec)
    
    mysql> select * from test;
    +------+---------+
    | id   | realnum |
    +------+---------+
    |  001 |    NULL |
    | 1234 |    NULL |
    |  002 |   999.9 |
    +------+---------+
    3 rows in set (0.02 sec)
    复制代码

    附录 常见MySQL数据类型(留作备忘)

    类 型

    大 小

    描 述

    CAHR(Length)

    Length字节

    定长字段,长度为0~255个字符

    VARCHAR(Length)

    String长度+1字节或String长度+2字节

    变长字段,长度为0~65 535个字符

    TINYTEXT

    String长度+1字节

    字符串,最大长度为255个字符

    TEXT

    String长度+2字节

    字符串,最大长度为65 535个字符

    MEDIUMINT

    String长度+3字节

    字符串,最大长度为16 777 215个字符

    LONGTEXT

    String长度+4字节

    字符串,最大长度为4 294 967 295个字符

    TINYINT(Length)

    1字节

    范围:-128~127,或者0~255(无符号)

    SMALLINT(Length)

    2字节

    范围:-32 768~32 767,或者0~65 535(无符号)

    MEDIUMINT(Length)

    3字节

    范围:-8 388 608~8 388 607,或者0~16 777 215(无符号)

    INT(Length)

    4字节

    范围:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(无符号)

    BIGINT(Length)

    8字节

    范围:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(无符号)

    FLOAT(Length, Decimals)

    4字节

    具有浮动小数点的较小的数

    DOUBLE(Length, Decimals)

    8字节

    具有浮动小数点的较大的数

    DECIMAL(Length, Decimals)

    Length+1字节或Length+2字节

    存储为字符串的DOUBLE,允许固定的小数点

    DATE

    3字节

    采用YYYY-MM-DD格式

    DATETIME

    8字节

    采用YYYY-MM-DD HH:MM:SS格式

    TIMESTAMP

    4字节

    采用YYYYMMDDHHMMSS格式;可接受的范围终止于2037年

    TIME

    3字节

    采用HH:MM:SS格式

    ENUM

    1或2字节

    Enumeration(枚举)的简写,这意味着每一列都可以具有多个可能的值之一

    SET

    1、2、3、4或8字节

    与ENUM一样,只不过每一列都可以具有多个可能的值

    参考资料:http://blog.csdn.net/reanimation1/archive/2008/08/26/2833327.aspx

    mysql查看表的结构的mysql语句为:

    复制代码
    mysql查看表结构命令,如下:
    
    desc 表名;
    show columns from 表名;
    describe 表名;
    show create table 表名;
    
    use information_schema;
    select * from columns where table_name='表名';
    
    顺便记下:
    show databases; --显示数据库列表
    use 数据库名;         --设置为当前工作数据库
    show tables;         --显示当前工作数据库 下的表 列表
    
    
    
    原有一unique索引AK_PAS_Name(PAC_Name)在表tb_webparamcounter中,
    执行以下sql修改索引
    alter table tb_webparamcounter drop index AK_PAS_Name;
    alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name);
    
    若发现索引的逻辑不对,还需要再加一个字段进去,执行
    alter table tb_webparamcounter drop index AK_PAS_Name;
    alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name,PAC_Value);
    注意:这时的PC_ID,PAC_Name,PAC_Value三个字段不是FOREIGN KEY
    否则必需先drop FOREIGN KEY,再重做上一步才行
    
    顺便提下oracle
    select * from v$database;
    select * from all_users;
    select * from user_tables;
    复制代码

    转载请注明出处:http://www.cnblogs.com/ayanmw 我会很高兴的!

  • 相关阅读:
    JavaScript中函数和构造函数的区别
    如何使用less(变量,混合,匹配,运算,嵌套...)
    sublime text3 最常用的快捷键及插件
    ReentrantLock实现原理
    揭密FutureTask
    消息队列设计精要(转)
    漫谈MySql中的事务
    浅析Spring AOP
    理解java动态代理
    理解tomcat之搭建简易http服务器
  • 原文地址:https://www.cnblogs.com/qianxinxu/p/8594007.html
Copyright © 2020-2023  润新知