MySQL的資料型別

2021-08-21 08:16:56 字數 4365 閱讀 4908

注:整型的資料預設有符號;

若超出的範圍,低的顯示最的範圍,高的顯示最高範圍;

可以指定顯示寬度,int(3),但是顯示寬度不一定等於儲存寬度(預設的顯示寬度,都是在最大值的基礎上      加1)

*****=用zerofill測試整數型別的顯示寬度**********===

mysql> create table t7(x int(3) zerofill);  # 自動補0

小整數:

tinyint[(m)] [unsigned] [zerofill]

有符號: -128 ~ 127 無符號: 0 ~ 255 ps: mysql中無布林值,使用tinyint(1)構造。

***********************************===

#float[(m,d)] [unsigned] [zerofill]

定義:單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值為255,d最大值為30

有符號:

-3.402823466e+38 to -1.175494351e-38,

1.175494351e-38 to 3.402823466e+38

無符號:

1.175494351e-38 to 3.402823466e+38

精確度: 

**** 隨著小數的增多,精度變得不準確 ****

***********************************===

#double[(m,d)] [unsigned] [zerofill]

定義:雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值為255,d最大值為30

有符號:

-1.7976931348623157e+308 to -2.2250738585072014e-308

2.2250738585072014e-308 to 1.7976931348623157e+308

無符號:

2.2250738585072014e-308 to 1.7976931348623157e+308

精確度:

****隨著小數的增多,精度比float要高,但也會變得不準確 ****

***********************************===

decimal[(m[,d])] [unsigned] [zerofill]

定義:準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值為65,d最大值為30。

精確度:

**** 隨著小數的增多,精度始終準確 ****

對於精確數值計算時需要用此型別

decaimal能夠儲存精確值的原因在於其內部按照字串儲存。

year

yyyy(1901/2155)

date

yyyy-mm-dd(1000-01-01/9999-12-31)

time

hh:mm:ss('-838:59:59'/'838:59:59')

datetime

yyyy-mm-dd hh:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59    y)

timestamp

yyyymmdd hhmmss(1970-01-01 00:00:00/2037 年某時)

注意:  1.需要以字串的形式,按照對應的格式插入 ;若要插入當前時間,用now()函式              

2. 插入年份時,盡量使用4位值               

3. 插入兩位年份時,<=69,以20開頭,比如50, 結果2050                  

>=70,以19開頭,比如71,結果1971

datetime與timestamp的區別:

1.datetime的日期範圍是1001——2023年,timestamp的時間範圍是1970——2023年。

2.datetime儲存時間與時區無關,timestamp儲存時間與時區有關,顯示的值也依賴於時區。在mysql伺服器,

作業系統以及客戶端連線都有時區的設定。

3.datetime使用8位元組的儲存空間,timestamp的儲存空間為4位元組。因此,timestamp比datetime的空間利用率更高。

4.datetime的預設值為null;timestamp的字段預設不為空(not null),預設值為當前時間(current_timestamp),

如果不做特殊處理,並且update語句中沒有指定該列的更新值,則預設更新為當前時間。

#注意:char和varchar括號內的引數指的都是字元的長度

1 char型別:定長,簡單粗暴,浪費空間,訪問速度快

字元長度範圍:0-255(乙個中文是乙個字元,是utf8編碼的3個位元組)

儲存:儲存char型別的值時,會往右填充空格來滿足長度

檢索:在檢索或者說查詢時,查出的結果會自動刪除尾部的空格,除非我們開啟(mysql>set sql_mode = 'pad_char_to_full_length';)

比如,mysql> select char_length(x),char_length(y) from t1; # 乙個存3取3(保留存入狀態),乙個存5取2(捨去後面的空格)

(length:檢視位元組數     char_length:檢視字元數)

因為這種機制,對於char型別在檢索時:

mysql>select name from t1 where name="李傑"; # 可以查到

mysql>select name from t1 where name like "李傑"; # 不能查到,必須改為"李傑 "

2 varchar型別:變長,精準,節省空間,訪問速度慢

字元長度範圍:0-65535(如果大於21845會提示用其他型別 。mysql行最大限制為65535位元組,字元編碼為utf-8:

儲存:varchar型別儲存資料的真實內容,不會用空格填充,如果'ab  ',尾部的空格也會被存起來

強調:varchar型別會在真實資料前加1-2bytes的字首,該字首用來表示真實資料的bytes位元組數(1-2bytes最大表示65535個數字,正好符合mysql對row的最大位元組限制,即已經足夠使用)

如果真實的資料<255bytes則需要1bytes的字首(1bytes=8bit 2**8最大表示的數字為255)

如果真實的資料》255bytes則需要2bytes的字首(2bytes=16bit 2**16最大表示的數字為65535)

檢索:尾部有空格會儲存下來,在檢索或者說查詢時,也會正常顯示包含空格在內的內容

note:

實際中對於一串的資料「ad cc  dds」,char型別可以直接定長讀取;而varchar要有乙個表頭,表示每次應讀幾個字元。

注:雖然varchar使用起來較為靈活,char資料型別的處理速度(訪問時)更快。

一章表中char與varchar不要混合使用;一般將char型別放前面,varchar放後面。

3 其他字串系列(效率:char>varchar>text)

text系列 tinytext text mediumtext longtext

text:text資料型別用於儲存變長的大字串,可以組多到65535 (2**16 − 1)個字元。

mediumtext:a text column with a maximum length of 16,777,215 (2**24 − 1) characters.

longtext:a text column with a maximum length of 4,294,967,295 or 4gb (2**32 − 1) characters.

blob 系列    tinyblob blob mediumblob longblob 

binary系列 binary varbinary

enum 單選 只能在給定的範圍內選乙個值,如性別 *** 男male/女female

set 多選 在給定的範圍內可以選擇乙個或乙個以上的值(愛好1,愛好2,愛好3...)

mariadb [db1]> create table consumer( 

-> name varchar(50),

-> *** enum('male','female'),

-> level enum('vip1','vip2','vip3','vip4','vip5'), #在指定範圍內,多選一

-> hobby set('play','music','read','study') #在指定範圍內,多選多

-> );

mariadb [db1]> insert into consumer values  

-> ('egon','male','vip5','read,study'),

-> ('alex','female','vip1','girl');

mysql資料型別用法 mysql資料型別和用法

歡迎進入linux社群論壇,與200萬技術人員互動交流 進入 mysql支援多種列型別 數值型別 日期 時間型別和字串 字元 型別。本章首先對這些列型別進行了概述,然後更加詳細地描述了各種列的型別,以及列型別儲存需求的總結。概述很簡單。關於具體列型別 歡迎進入linux社群論壇,與200萬技術人員互...

mysql 資料型別 真假 MySQL 資料型別

mysql基礎 資料型別 整型型別 根據所儲存的整數數值取值範圍不同,可分為以下五類 1 tinyint佔1個位元組 2 smallint佔2個位元組 3 mediumint 佔3個位元組 4 int佔4個位元組 5 bigint佔8個位元組 根據每種型別所佔的位元組數可確定其無符號整數和有符號整數...

mysql 郵箱 資料型別 mysql 資料型別

1 整型mysql資料型別含義 有符號 tinyint m 1個位元組 範圍 128 127 smallint m 2個位元組 範圍 32768 32767 mediumint m 3個位元組 範圍 8388608 8388607 int m 4個位元組 範圍 2147483648 21474836...