数据类型

一、介绍

  存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的。

mysql常用数据类型概览

#1、数字;
    整型:tinyinit 、int 、bigint
    小数:
            float:在位数比较短的情况下不精准
            double:在位数比较长的情况下不精准
                        0.000001230123123123
                        存成:0.000001230000
            decimal:(如果用小数,则推荐使用decimal)
                         精准
                         内部原理是以字符串形式去存

#2、字符串
    char(10):简单粗暴,浪费空间,存取速度快
                root存成root000000
    varchar:精准,节省空间,存取速度慢
    sql优化:创建表时,定长的类型往前放,变长的往后防
                                 比如性别                例如地址或描述信息
    >255个字符,超过了就把文件路径存放到数据库中。
                        比如图片,视频等找一个文件服务器,数据库中只存路径或url

#3、时间类型:
    最常用:datetime

#4、枚举类型与集合类型

二、数值类型

1、整数类型

整数类型:tinyint / smallint / mediumint / int / bigint

作用:存储年龄,等级,id,各种号码等

===========================================
tinint [(m)] [unsigned] [zerofill]
    小整数,数据类型用于保存一些范围的整数数值范围:
        有符号:-128~127
        无符号:0~255
    PS:MySQL中无布尔值,使用tinyint(1)构造。

===========================================
int[(m)] [unsigned] [zerofill]
    整数,数据类型用于保存一些范围的整数数值范围:
        有符号:-2147483648~2147483647
        无符号:0`4294967295

===========================================
bigint [(m)] [unsigned] [zerofill]
    大整数,数据类型用于保存一些范围的整数数值范围:
        有符号:-9223372036854775808~9223372036854775808
        无符号:0~18446744073709551615

 

===================有符号和无符号tinyint===============

#tinyint 默认为有符号

create table t1(x tinyint);       #默认为有符号,即数字前有正负号
desc t1;
insert into t1 values(-129),(-128),(127),(128);
select * from t1;

+------+
| x    |
+------+
| -128 | #-129存成了-128
| -128 | #有符号,最小值为-128
|  127 | #有符号,最大值127
|  127 | #128存成了127
+------+

#设置无符号tinyint

create table t2(x tinyint unsigned);
insert into t2 values(-1),(0),(255),(256);
select * from t2;

+------+
| x    |
+------+
|    0 | -1存成了0
|    0 | #无符号,最小值为0
|  255 | #无符号,最大值为255
|  255 | #256存成了255
+------+



=================有符号和无符号int==================

#int 默认为有符号

create table t3(x,int);    #默认为有符号整数
insert into t3 values(-2147483649),(-2147483648),(2147483647),(2147483648);
select * from t3;

+-------------+
| x           |
+-------------+
| -2147483648 | #-2147483649存成了-2147483648
| -2147483648 | #有符号,最小值为-2147483648
|  2147483647 | #有符号,最大值为2147483647
|  2147483647 | #2147483648存成了2147483647
+-------------+

#设置无符号int
create table t4(x int unsigned);
insert into t4 values(-1),(0),(4294967295),(4294967296);
select * from t4;

+------------+
| x          |
+------------+
|          0 | #-1存成了0
|          0 | #无符号,最小值为0
| 4294967295 | #无符号,最大值为4294967295
| 4294967295 | #4294967296存成了4294967295
+------------+

===================有符号和无符号bigint==================

# 设置有符号bigint

create table t6(x bigint);
insert into t5 values(-9223372036854775809),(-9223372036854775808),(9223372036854775807),(9223372036854775808);
select * from t5;

+-------------------------------+
| x                                      |
+-------------------------------+
| -9223372036854775808 |
| -9223372036854775808 |
|  9223372036854775807 |
|  9223372036854775807 |
+--------------------------------+

#设置无符号bigint

create table t6(x bigint unsigned);
insert into t6 values(-1),(0),(18446744073709551615),(18446744073709551616);
select * from t6;

+--------------------------------+
| x                                       |
+---------------------------------+
|                                       0 |
|                                       0 |
| 18446744073709551615 |
| 18446744073709551615 |
+--------------------------------+

===================用zerofill测试整数类型的显示宽度================

create table t7(x int(3) zerofill);
insert into t7 values(1),(11),(111),(1111);
select * from t7;

+------+
| x      |
+------+
|  001 |
|  011 |
|  111 |
| 1111 | #超过宽度限制仍然可以存
+------+

# int(宽度)       这里的宽度只是显示宽度,不是实际的存储宽度

注意:为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关,存储范围如下。其实我们完全没必要为整数 

 

posted on 2017-12-15 20:33  卖火柴的嫩火柴  阅读(128)  评论(0编辑  收藏  举报

导航