mysql---數據庫數據類型(四)

4. 數據類型

4.1 數據類型分類

在這裏插入圖片描述
4.2 數值類型
在這裏插入圖片描述
4.2.1 tinyint類型

數值越界測試:
創建一張新表

create table tt1(num tinyint);

插入新的數據

 insert	into tt1 values(1);

再插入一個越界的數據

insert	into tt1 values(128); -- 越界插入,報錯

會出現下面的錯誤

ERROR 1264 (22003): Out of range value for column 'num' at row 1

再查詢的時候也只會出現沒有越界的數據
在這裏插入圖片描述
說明:

  • 在MySQL中,整型可以指定是有符號的和無符號的,默認是有符號的。
  • 可以通過UNSIGNED來說明某個字段是無符號的
  • 無符號案例
    在這裏插入圖片描述
  • 其他類型自己推導

注意:儘量不使用unsigned,對於int類型可能存放不下的數據,int unsigned同樣可能存放不下,與其如此,還不如設計時,將int類型提升爲bigint類型。

4.2.2 bit類型

基本語法:

bit[(M)] : 位字段類型。M表示每個值的位數,範圍從1到64。如果M被忽略,默認爲1。

舉例:

在這裏插入圖片描述
bit使用的注意事項:

  • bit字段在顯示時,是按照ASCII碼對應的值顯示。
    在這裏插入圖片描述

  • 如果我們有這樣的值,只存放0或1,這時可以定義bit(1)。這樣可以節省空間。

在這裏插入圖片描述
4.2.3 小數類型

4.2.3.1 float

語法:

float[(m, d)] [unsigned] : M指定顯示長度,d指定小數位數,佔用空間4個字節

案例:

小數:float(4,2)表示的範圍是-99.99 ~ 99.99,MySQL在保存值時會進行四捨五入。

在這裏插入圖片描述
案例:

如果定義的是float(4,2) unsigned 這時,因爲把它指定爲無符號的數,範圍是 0 ~ 99.99
在這裏插入圖片描述
4.2.3.2 decimal

語法:

decimal(m, d) [unsigned] : 定點數m指定長度,d表示小數點的位數
  • decimal(5,2) 表示的範圍是 -999.99 ~ 999.99

  • decimal(5,2) unsigned 表示的範圍 0 ~ 999.99

  • decimal和float很像,但是有區別:

  • float和decimal表示的精度不一樣
    在這裏插入圖片描述
    說明:float表示的精度大約是7位。

    decimal整數最大位數m爲65。支持小數最大位數d是30。如果d被省略,默認爲0.如果m被省略,默認是10。

建議:如果希望小數的精度高,推薦使用decimal。

4.3 字符串類型

4.3.1 char

語法:

char(L): 固定長度字符串,L是可以存儲的長度,單位爲字符,最大長度值可以爲255

案例(char):
在這裏插入圖片描述
說明:
char(2) 表示可以存放兩個字符,可以是字母或漢字,但是不能超過2個, 最多隻能是255
在這裏插入圖片描述
4.3.2 varchar

語法:

varchar(L): 可變長度字符串,L表示字符長度,最大長度65535個字節

案例:
在這裏插入圖片描述
說明:

關於varchar(len),len到底是多大,這個len值,和表的編碼密切相關:

  • varchar長度可以指定爲0到65535之間的值,但是有1 - 3 個字節用於記錄數據大小,所以說有效字節數是65532。

  • 當我們的表的編碼是utf8時,varchar(n)的參數n最大值是65532/3=21844[因爲utf中,一個字符佔用3個字節],如果編碼是gbk,varchar(n)的參數n最大是65532/2=32766(因爲gbk中,一個字符佔用2字節)。
    在這裏插入圖片描述
    在編碼是utf-8的時候我們的最大值是不能超過65532/3=21844,因爲在utf-8中一個字符佔用一個三字節,爲什麼是65532呢,因爲varchar在開始的時候使用1-3字節用於記錄數據的大小。在使用gbk的時候最大的參數n是65532/2=32766,因爲在gbk中一個字符佔用兩個字節。
    4.3.3 char和varcahr比較
    在這裏插入圖片描述
    如何選擇定長或變長字符串?

    • 如果數據確定長度都一樣,就使用定長(char),比如:身份證,手機號,md5
    • 如果數據長度有變化,就使用變長(varchar), 比如:名字,地址,但是你要保證最長的能存的進去。
    • 定長的磁盤空間比較浪費,但是效率高。
    • 變長的磁盤空間比較節省,但是效率低。

4.4 日期和時間類型

常用的日期有如下三個:

  • datetime 時間日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示範圍從1000到9999,佔用八字節
  • date:日期 ‘yyyy-mm-dd’,佔用三字節
  • timestamp:時間戳,從1970年開始的 yyyy-mm-dd HH:ii:ss格式和datetime完全一致,佔用四字節案例:
    在這裏插入圖片描述
    4.5 enum和set

語法:

  • enum:枚舉,“單選”類型;
    enum(‘選項1’,‘選項2’,‘選項3’,…);

該設定只是提供了若干個選項的值,最終一個單元格中,實際只存儲了其中一個值;而且出於效率考慮,這些值實際存儲的是“數字”,因爲這些選項的每個選項值依次對應如下數字:1,2,3,…最多65535個;當我們添加枚舉值時,也可以添加對應的數字編號。

  • set:集合,“多選”類型;

    set(‘選項值1’,‘選項值2’,‘選項值3’, …);

該設定只是提供了若干個選項的值,最終一個單元格中,設計可存儲了其中任意多個值;而且出於效率考慮,這些值實際存儲的是“數字”,因爲這些選項的每個選項值依次對應如下數字:1,2,4,8,16,32,… 最多64個。

說明:不建議在添加枚舉值,集合值的時候採用數字的方式,因爲不利於閱讀。

案例:

有一個調查表votes,需要調查人的喜好, 比如(登山,游泳,籃球,武術)中去選擇(可以多選),(男,女)[單選]
在這裏插入圖片描述
插入數據:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章