Home >Database >Mysql Tutorial >小贝_mysql建表以及列属性_MySQL

小贝_mysql建表以及列属性_MySQL

WBOY
WBOYOriginal
2016-06-01 13:00:051019browse

mysql建表以及列属性

简要:
一、建表原则
二、详细的列属性说明

 

一、建表原则

建表: 其实就是声明列的过程,数据最终是以文件的形式放在硬盘(内存)

列: 不同的列类型占的空间不一样. 选列的原则: 够用,不浪费

 

二、列类型以及属性说明

列类型有: 整形、浮点型、字符型、日期/时间型

2.1、整形

tinyint/smallint/mediumint/int/bigint

2.1.1、详解tinyint 一个字节

[][][][][][][][]共8位

假设8为都为0 ==》 转化为十进制 0

假设8为都为1 ==》 转换为十进制 2^8-1

由于计算机也能够存储负数,并采用最高位为符号位

最高位为0代表正数 最高位为1代表负数

当最高位为0时:

[0][][][][][][][] => 0~2^7-1 转化为十进制 0~127

当最高位为1时

[1][][][][][][][] => 0~-2^7 转化为十进制 0~-128

字节

无符号

有符号

tinyint

1

0~255

-128~127

smallint

2

0~2^16-1

-2^15~2^15

medium

3

0~2^24-1

-2^23~2^23

int

4

0~2^32-1

-2^31~2^31

bigint

8

0~2^64-1

-2^63~2^63

2.1.2、实例

 

 

\

 

 

\

 

 

2.1.3、整形列可选属性: not null unsigned zerofill

\

 

总结:

a、声明整数型列需要0填充时,它一定是无符号的

b、进行0填充时,不会改变其大小值

 

2.2、浮点型

对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。

float与decimal的区别:decimal更精确

 

\

2.3、字符型

char:定长char(M),M代表宽度,即可容纳的字符数

varchar:变长char(M),M代表宽度,即可容纳的字符数

区别:

a、效率方面看,char

即char会有完全利用的情况,而varchar则不会。因为同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度

b、针对尾部(从左往右的方向看),char会过滤尾部有空格的情况,而varchar不会。因为char存储的字符少于定义的字符长度时,就会对尾部进行空格填充.进行展示时,再把尾部的空格去掉

案例:

CREATETABLE vc (v VARCHAR(4), c CHAR(4));

INSERTINTO vc VALUES ('ab ', 'ab ');

SELECTCONCAT(v, '+'), CONCAT(c, '+') FROM vc;

字节问题:

varchar(N), 这里的N是指字符数,并不是字节数.占用的字节数与编码有关

utf-8,一个汉字3字节 英文字母1字节

MySQL 5.0以上的版本:

1.一个汉字占多少长度与编码有关:

UTF-8:一个汉字=3个字节

GBK:一个汉字=2个字节

2.varchar(n)表示n个字符,无论汉字和英文,Mysql都能存入n个字符,仅是实际字节长度有所区别

3.MySQL检查长度,可用SQL语言:

select LENGTH(fieldname) from tablename来查看

2.4、日期与时间型

2.4.1、 year

 

\

 

总结

MySQL以YYYY格式检索和显示YEAR值。范围是1901到2155。

可以指定各种格式的YEAR值:

· 四位字符串,范围为'1901'到'2155'。

· 四位数字,范围为1901到2155。

· 两位字符串,范围为'00'到'99'。'00'到'69'和'70'到'99'范围的值被转换为2000到2069和1970到1999范围的YEAR值。

· 两位整数,范围为1到99。1到69和70到99范围的值被转换为2001到2069和1970到1999范围的YEAR值。请注意两位整数范围与两位字符串范围稍有不同,因为你不能直接将零指定为数字并将它解释为2000。你必须将它指定为一个字符串'0'或'00'或它被解释为0000。

2.4.2、 time

MySQL以'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。

2.4.3、 date

当你只需要日期值而不需要时间部分时应使用DATE类型。MySQL用'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是'1000-01-01'到 '9999-12-31'。

2.4.4、 datetime

总结:虽然mysql有时间与日期的类型。但在一般的开发过程中涉及到跟时间方面的列类型时,通常使用int即整形类型。主要考虑到开发方面的方便,而且整形效率高。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn