關於MySQL資料型別的一些注意問題

2021-08-08 10:45:17 字數 2287 閱讀 3443

用了3年的mysql了,一直對這方面比較忽視,總是固定套著sql模板寫,很多細節方面沒有注意,今天詳細的看了一下mysql方面的書籍,特意記下來,希望能夠重視這些小問題。

1、整數型別

1)長度排序:tinyint(1位元組,-128~127) <  smallint(2位元組) < mediumint(3位元組) < int(4位元組) <  bigint(8位元組)。由此可見,int型別的長度還是很長的。

2)numeric和decimal型別 屬於可指定小數字和整數字的型別,往往用於儲存 貨幣或有精度要求的儲存。如:numeric(5,2),但是要注意的是,

無論numeric還是decimal,括號裡的第一位表示的是有效數字長度,第二位表示的是小數點後的位數

如:numeric(5,2)的範圍是  -999.99~999.99,而不是 -99999.99~99999.99, 上述的5 代表的是有效數字長度。

2、日期和時間

1)date 只記錄日期,有年、月、日,但不記錄時間,從date 轉換為datetime或timestamp,得到的是 『yyyy-mm-dd 00:00:00』。

2)datetime除了範圍比timestamp廣以外,timestamp的主要優勢在於:

update的時候,如果timestamp的新值和原來的值一樣,mysql會忽略這更改(提高效率)

insert插入資料的時候,如果timestamp沒賦值,其會自動預設

有插入值插入當前時間!連續的timestamp只會預設插入第乙個為當前時間。

3)year 如果只插入或更新兩位數,這兩位數小於等於69,則對應的是2000~2069年份,如果大於等於70,則對應的是1970~1999年份。

3、字串

1)長度小於 4 的 varchar 被改變為 char。

2)如果在乙個表中的任何列有可變長度,結果是整個行是變長的。

在這種情況下,如果一張表包含任何變長的列(varchar、text 或 blob),所有大於 3 個字元的 char列被改變為 varchar列。

3)blob和 text型別的唯一區別是,blob型別在排序時區分大小寫,而text不區分。

4)由於 blob 和 text 值的大小變化很大,如果進行的刪除和更新很多,則儲存它們的表出現高碎片率會很高。應該定期地執行optimize table減少碎片率以保持良好的效能。

4、enum和 set 型別區別

1)enum固定佔兩個位元組,可以有 65535 個成員。set 為可變長,最多佔8個位元組,最多可有64個成員

2)enum 的值只能是成員中的乙個,而set的值可以為多個成員,甚至空字串(「」),表示沒有任何成員。

enum和set都可存放null值,只要沒有指定為not null的話。

如:color enum(―red,black,green,yellow)

property set(―car,house,stock) not null

那麼 color 和 property 可能的值分別為:

color:null、red、black、green和yellow

而 property 可能的值就複雜的多:

――car

―house

―car,house

―stock

―car,stock

―house,stock

―car,house,stock

造成這種原因是因為:

enum 的值儲存方式是乙個數值對應乙個成員。這就意味著2個位元組一共65536 個數值,就可以有65536 個成員。但是,0是enum 內建的錯誤成員,所以實際上最多只能有65535 個成員。

set 是每乙個二進位制位對應乙個成員,0表示這個成員存在,1表示不存在。這就是為什麼set可以出現多個成員同時出現的情況,兒空字串則相當於:00000000。對於大小為 1 到

8、9 到 16、17 到 24、25 到 32、33 到 64 個成員的集合,其 set 值分別占用 1、2、3、4 或 8 個位元組。

MySQL的一些資料型別

如果乙個float型資料轉成二進位制後的第32位之後都是0,那麼資料是準的 如果乙個float型資料轉成二進位制後的第32位之後不全為0,則資料就會存在誤差 float和double型別的區別和誤差 但是decimal型別是mysql官方唯一指定能精確儲存的型別,也是dba強烈推薦和金錢相關的型別都...

關於LONG資料型別使用上的一些總結

1 long 資料型別中儲存的是可變長字串,最大長度限制是2gb。2 對於超出一定長度的文字,基本只能用long型別來儲存,資料字典中很多物件的定義就是用long來儲存的。3 long型別主要用於不需要作字串搜尋的長串資料,如果要進行字元搜尋就要用varchar2型別。4 很多任務具,包括sql p...

關於js資料型別的一些知識點(一)

學習js有接近3個月了,一直沒有系統梳理過一些知識點,再翻看以前的學習筆記的時候,希望可以整理總結一下。一 基本資料型別有 number,string,boolean,null,undefined,object。六種。array 陣列 function 函式 均為物件 引用 型別。二 資料型別之間轉...