小貝_mysql建表以及列屬性,小貝_mysql列屬性

來源:互聯網
上載者:User

小貝_mysql建表以及列屬性,小貝_mysql列屬性
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<=1               varchar<1

即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即整形類型。主要考慮到開發方面的方便,而且整形效率高。


The quieter you become,the more you are able to hear!

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.