博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】...
阅读量:6591 次
发布时间:2019-06-24

本文共 3155 字,大约阅读时间需要 10 分钟。

转载自: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: 0mysql> 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: 0mysql> 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一样,只不过每一列都可以具有多个可能的值

 

 

参考资料:

 

 

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,再重做上一步才行顺便提下oracleselect * from v$database;select * from all_users;select * from user_tables;

 

 

你可能感兴趣的文章
【Leetcode】98. 验证二叉搜索树
查看>>
Vagrant (一) - 基本知识
查看>>
在 CentOS 7 上搭建 Jenkins + Maven + Git 持续集成环境
查看>>
数据结构与算法 | Leetcode 19. Remove Nth Node From End of List
查看>>
一起来读you don't know javascript(一)
查看>>
[LeetCode] 862. Shortest Subarray with Sum at Least K
查看>>
【分享】终端命令工具 自动生成vue组件文件以及修改router.js
查看>>
[LeetCode] Student Attendance Record I
查看>>
PHP回顾之多进程编程
查看>>
spring boot + redis
查看>>
Ajax技术细节
查看>>
nuxt.js部署vue应用到服务端过程
查看>>
删除数组中的指定元素 | JavaScript
查看>>
CSS3+JS实现静态圆形进度条【清晰、易懂】
查看>>
关于树形插件展示中数据结构转换的算法
查看>>
图片加载框架之Fresco
查看>>
Spotify开源其Cassandra编排工具cstar
查看>>
高性能web建站规则(将js放在页面底部)
查看>>
Java EnumMap工作原理及实现
查看>>
阐述Spring框架中Bean的生命周期?
查看>>