(2)mysql支持的数据类型

来源:互联网 发布:一诺网络 编辑:程序博客网 时间:2024/05/17 02:42

每一个常量、变量、参数都有数据类型,用来指定一定的存储格式、约束和有效范围。

TINYINT 占1个字节:范围:2^8=256     无符号0-255   有符号:-128-127                                                               一百

SMALLINT占2个字节:范围:2^16=65536   无符号0-65535   有符号:-32768-32767                                        六万

MEDIUMINT  占3个字节: 范围:2^24=16777216   无符号:0-16777215   有符号:-8388608-8388607       1500万

INT  占4个字节 范围:2^32=4294967296   无符号:4294967295    有符号:-2147483648-2147483647       42亿

BIGINT  占8个字节  范围:2^64=18446744073700000000            1844千万万亿

一:数值类型

int类型

对于整型数据,MySQL支持在类型名称后面的小括号显示指定宽度,但是指定宽度只是希望显示的宽度。比如int(5),和zerofill合作后。我插入数字3,则显示00003,如果插入55555555,则显示55555555。只是期望显示5位,但具体的限制还是4294967296.

创建一个表示,指定主键,可以使用如下:


create table test2(id int not null PRIMARY KEY);

或者

create table test2(id int not null, PRIMARY KEY(id));

小数类型

对于小数,mysql分为两种:浮点数和定点数

浮点数:float 和 double 类型(点后面的小数按照四舍五入浮动,不精确。1.436  会表示为1.44)

定点数:decimal类型  在mysql内用字符串的形式表示,比浮点数更加精确,适合用来表示货币等精度高的数据。(不会浮动,点后面是定的)

decimal可以使用(M,D)的方法来指定显示的小数位数,而float,double最好不用。所以定点数精度更高。

浮点数和定点数都可以用(M,D)类型来表示。M为精度,D为标度。M表示有多少位,D表示有多少小数。

(M,D)对于float,double为不标准用法,所以在数据库迁移时会带来很多麻烦。最好不要用。

float和double在不指定精度时,会默认按照实际的精度,(计算机本身的精度来显示)

decimal在不指定精度时,默认的整数位为10,默认的小数位为0.

BIT类型

用于存放字段值。BIT(M)用来存放多位二进制数,M范围为1-64,不写默认为1.

比如存放10,则BIT类型的数据表示为1010.

查询显示时,不可以用SELECT * FROM t1.

要使用select bin(id) from xxx   bin二进制,hex十六进制。

二:日期时间类型

日期和时间类型可以分为5种。

DATE:表示年月日

TIME:表示时分秒

DATETIME:表示年月日时分秒

TIMESTAMP:表示为年月日时分秒

YEAR:只表示年,范围是1901-2155

TIMESATMP和DATETIME的区别与联系

扩展:查看当前时区:show variables like 'time_zone';
            设置时区:set time_zone='+9:00';
timestamp:支持的时间范围小,从1970-2038年某个时间       datetime:从1000-9999年某个时间

timestamp:表中的第一个timestamp列自动设置为系统时间。
                        插入和查询受时区的影响,更能反映出实际的时间。
datetime:只能反映出插入方当地的时区。
三:字符串类型

char和varchar的区别

char长度固定,varchar长度不固定。

比如char(M)表示每个值都占用M个字节,不足的用空格补齐。

varchar只占用刚够用的字节再加上一个记录长度的字节。   总长度为L+1

并且在检索的时候,char会删除尾部空格,而varchar会保留尾部空格


枚举类型

ENUM值得范围需要在创建表时通过枚举方式显示指定,最多允许65535个成员。

mysql> create table e(sex enum('M','F'));
Query OK, 0 rows affected (0.07 sec)


mysql> desc e;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| sex   | enum('M','F') | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
1 row in set (0.01 sec)

mysql> insert into e values('M'),('1'),('f');
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0


mysql> select * from e;
+------+
| sex  |
+------+
| M    |
| F    |
| F    |
| M    |
| M    |
| F    |
+------+
6 rows in set (0.00 sec)

可见:枚举类型不区分大小写,并且1代表M,2代表F。


SET和ENUM的区别。
SET 范围小,只可以保存0-64范围内的成员
但是SET一次可以选取多个成员。
ENUM一次只可以选取一个成员。(在表单选择时)
0 0
原创粉丝点击