mysql基礎篇 資料型別(列屬性)

2021-10-05 10:14:27 字數 3358 閱讀 2801

資料型別: mysql對資料進行統一的分類, 統一的進行管理,更好的利用有限的空間。

分三大類: 數值型別

, 字串型別和時間日期型別。

系統將數值型分為整數型和小數型。

在sql中因為更多要考慮如何節省磁碟空間, 所以系統將整型又細分成了5類。

建立一張整型表

int(m):m表示顯示寬度,從左到右填充空格。搭配zerofill(0填充),當資料位數不超過m位時,用0填齊,保證資料格式,無特殊含義。

小數型: 帶有小數點或者範圍超出整型的數值型別.。sql中: 將小數型細分成兩種: 浮點型和定點型。

小數點浮動, 精度有限,而且會丟失精度。

float: 單精度, 占用4個位元組儲存資料, 精度範圍大概為7位左右

double: 雙精度,占用8個位元組儲存資料, 精度方位大概為15位左右

float(m,d): m代表總長度,d代表小數部分長度, 整數部分長度為m-d。

插入資料: 可以是直接小數,也可以是科學計數法。

浮點型資料的插入: 整型部分是不能超出長度的,但是小數部分可以超出長度(系統會自動四捨五入)。可以允許小數部分四捨五入導致整數進製。

小數點固定, 精度固定, 不會丟失精度。絕對的保證整數部分不會被四捨五入(不會丟失精度),小數部分有可能(理論小數部分也不會丟失精度)。

decimal(m,d)  

插入資料: 定點數的整數部分一定不能超出長度(進製不可以),小數部分的長度可以隨意超出(系統自動四捨五入).

浮點數如果進製導致長度溢位沒有問題,但是定點數不行.

顯示寬度,bit型別的資料使用,浮點型別的不準確性, 資料的溢位。

建議使用 tinyint 代替 enum、bitenum、set。

避免使用整數的顯示寬度,也就是說,不要用int(10)類似的方法指定字段顯示寬度,直接用int。

decimal最適合儲存準確度要求高,而且用於計算的資料,比如**。但是在使用decimal型別的時候,注意長度設定。 建議使用整形型別來運算和儲存實數,方法是,實數乘以相應的倍數後再操作。 

整數通常是最佳的資料型別,因為它速度快,並且能使用auto_incremen。

yyyy-mm-dd hh:ii:ss,表示的範圍是從1000到2023年,有0值: 0000-00-00 00:00:00 

時間戳, 並不是時間戳,只是從2023年開始的yyyy-mm-dd hh:ii:ss格式與datetime完全一致

日期,就是datetime中的date部分

時間(段),指定的某個區間之間,-時間到+時間

1901-2155  有0值

直接插入4位字串或者4位數字。

插入2位字串,『00』~『69』,2000~2069;『70』~『99』,1970~1999。如果是『0』,則與插入『00』效果相同,都是表示2023年。

插入2位數字,如果插入的是一位數字0,則表示的是0000,而不是2023年。

timestamp 預設值:current_timestamp   。是否根據當前時間戳更新 用於 表 的更新時間設計。只要當前所在的記錄被更新, 該欄位一定會自動更新成當前時間

如果我們想插入當前系統的時間,則可以插入current_date或者now()。

在給year型別賦值時,一定要分清0和『0』,雖然兩者相差個引號,但實際效果確實相差了2023年。

在sql中,將字串型別分成了6類: char,varchar,text , blob, enum和set。

定長字串: char, 磁碟(二維表)在定義結構的時候,就已經確定了最終資料的儲存長度.

char(l): l代表length, 可以儲存的長度, 單位為字元, 最大長度值可以為255.

char(4): 在utf8 環境下,需要4 * 3 = 12個位元組

變長字串: varchar, 在分配空間的時候, 按照最大的空間分配: 但是實際上最終用了多少,是根據具體的資料來確定.

varchar(l): l表示字元長度 理論長度是65536個字元, 但是會多處1到2個位元組來確定儲存的實際長度: 但是實際上如果長度超過255,既不用定長也不用變長, 使用文字字串text

varchar(10): 的確存了10個漢字, utf8環境, 10 * 3 + 1 = 31(bytes)  ; varchar(3) 儲存了3個漢字: 3 * 3 + 1 = 10(bytes)

定長與變長的儲存實際空間(utf8)

實際儲存資料

char(4)

varchar(4)

char占用位元組

varchar(占用位元組)

abcd

abcd

abcd

4 * 3 = 12

4 * 3 + 1 = 13aa

a4 * 3 = 12

1 * 3 + 1 = 4

abcde

資料超過長度

資料超過長度

如何選擇定長或者是變長字串呢?

定長的磁碟空間比較浪費, 但是效率高: 如果資料基本上確定長度都一樣, 就是使用定長, 如身份證, **號碼, 手機號碼等

變長的磁碟空間比較節省, 但是效率低: 如果資料不能確定長度(不同資料有變化), 如姓名, 位址等

如果資料量非常大, 通常說超過255個字元就會使用文字字串

文字字串根據儲存的資料的格式進行分類: text和blob

text: 儲存文字(二進位制資料實際上都是儲存路徑)

blob: 儲存二進位制資料(通常不用)

mysql中text文字字串,不占用記錄長度: 額外儲存. 但是text文字字串也是屬於記錄的一部分: 一定需要佔據記錄中的部分長度: 10個位元組(儲存資料的位址以及長度).

mysql中規定: 任何一條記錄最長不能超過65535個位元組.(varchar永遠達不到理論值),

varchar的實際儲存長度能達到多少呢? 看字符集編碼.

utf8 下varchar的實際頂配: 21844字元

gbk下的varchar的實際頂配: 32766字元

MySQL 基礎篇 資料型別

給表字段指定儲存格式 約束 有效範圍,mysql主要有以下幾種資料型別 型別關鍵字 位元組無符號最小值 無符號最大值 整數tinyint10 28 1 整數smallint20 216 1 整數mediumint30 224 1 整數int40 232 1 整數bigint80 264 1 浮點數f...

MySQL學習篇 資料型別的屬性 排序

預設值 default 預設值 非空 not null 修飾的字段在新增資訊是不能不填寫 自動增長 auto increment 盡量在 int 字段,每次自增 1 主鍵 primary key 一張表只有乙個字段作為主鍵,作為主鍵的字段,任意兩資訊不能重複 唯一鍵 unique 被其修飾的字段,其...

C語言基礎篇 資料型別

整數 小數 單精度常量 2.3f 雙精度常量 2.3,預設為雙精度。字元型常量 用英文單引號括起來,只儲存乙個字元 a b 還有轉義字元 n t 字串常量 用英文的雙引號引起來 可以儲存多個字元 abc 1 資料型別轉換 c 語言中如果乙個表示式中含有不同型別的常量和變數,在計算時,會將它們自動轉換...