日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 人名用什么类型_如何选择合适的MySQL数据类型

發布時間:2023/12/10 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 人名用什么类型_如何选择合适的MySQL数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、MySQL數據類型選擇原則

更小的通常更好:一般情況下選擇可以正確存儲數據的最小數據類型。越小的數據類型通常更快,占用磁盤,內存和CPU緩存更小。

簡單就好:簡單的數據類型的操作通常需要更少的CPU周期。例如:整型比字符操作代價要小得多,因為字符集和校對規則(排序規則)使字符比整型比較更加復雜。

盡量避免NULL:盡量制定列為NOT NULL,除非真的需要NULL類型的值。因為可能為NULL列使得索引,索引統計和值比較都更復雜。可為NULL的列會使用更多的存儲空間,在MySQL里也需要特殊處理。

二、選擇具體數據類型

在選擇列的數據類型時需要先選定合適的大類型,如:數字,字符串,時間等。

(1)、整數類型

數據類型

長度/字節

范圍

TINYINT

1

-2^7—2^7-1

SMALLINT

2

-2^15—2^15-1

MEDIUMINT

3

-2^23—2^23-1

INT

4

-2^31—2^31-1

BIGINT

8

-2^64—2^64-1

區分開TINYINT?/?INT?/?BIGINT,能確定不會使用負數的字段,建議添加 unsigned定義。

能夠用數字類型的字段盡量選擇數字類型而不用字符串類型。

(2)、實數類型

實數是帶有小數部分的數字。然而它們不只是存儲小數部分;也可以是DECIMAL存儲比BIGINT還大的整數。MYSQL即支持精確類型,也支持非精確存儲。FLOAT和DOUBLE類型支持使用標準的浮點運算進行近似計算。具體計算規則取決于所使用平臺的實現。

數據類型

長度/字節

范圍

FLOAT

4

DOUBLE

8

DECIMAL

最多65數字(5.0以上版本)

MySQL使用DOUBLE作為內部浮點計算的類型。注意,DECIMAL需要額外的空間和計算開銷,所以只要要求盡量對小數進行精確時才使用DECIMAL,例如在存儲財務數據時,可以用BIGINT來替代它來實現,只需要將數據乘以相應的倍數即可。

FLOAT和DOUBLE選擇(盡量選擇FLOAT)

如何有涉及到運算,用float和double可能會精度不準,可以考慮將小數乘于相應的倍數,然后用BIGINT來存儲。

(3)、字符串類型

MySQL支持多種字符串類型。從4.1版本開始,每個字符串列可以定義自己的字符集和校對規則(排序規則),這些東西會在很大程度上影響性能。

1、VARCHAR和CHAR類型

VARCHAR和CHAR時最主要的兩種字符串類型。

VARCHAR:適用于存儲變長的字符串,是最常見的字符串數據類型。它比定長更加節省空間,因為它僅需要使用必要的額外空間(如果MySQL表使用ROW_FORMAT=FIXED創建的話,會使用定長)。

適合使用該類型的情況:字符串列的最大長度比平均長度大很多;列的更新很少,所以碎片不是問題;使用了UTF-8這樣復雜的字符集,每個字符的使用不同字節數進行存儲。

注:5.0以上版本會保留末尾空格,更早的版本會刪除末尾空格。InnoDB存儲引擎會把過長的VARCHAR轉換為BLOB類型。

CHAR:CHAR是定長字符串類型,MySQL總是根據定義的類型進行分配足夠的空間。當存儲CHAR時MySQL會默認刪除行尾空格。因為CHAR值通常需要用空格進行填充以方便比較。

CHAR適合存儲很短的字符串,或者所有長度都接近一個長度。

對于經常變更的數據CHAR比較VARCHAR要好,因為定長的CHAR類型不容易產生碎片。

對于更短的列CHAR比VARCHAR要更加節省空間,因為VARCHAR總是需要一個額外的字節來存儲長度。

2、BLOB和TEXT類型

BLOB和TEXT是用來存儲很大的數據來設計的字符串數據類型,分別采用二進制和字符方式進行存儲。

實際上他們時屬于兩種不同數據類型家族:字符類型的時TINYTEXT, SMALLTEXT, TEXT, MEDIUMTEXT, LONGTEXT;對應的二進制類型是TINYBLOB, SMALLBLOB, BLOB, MEDIUMBLOB, LONGBLOB。

BLOB和TEXT的僅有的區別在于BLOB類型存儲的時二進制數據,沒有排序規則或字符集,而TEXT類型有字符集和排序規則。

char,varchar,TEXT的選擇:非萬不得已不要使用?TEXT?數據類型,定長字段,建議使用?CHAR?類型(填空格),不定長字段盡量使用?VARCHAR(自動適應長度,超過階段),且僅僅設定適當的最大長度。

(4)、日期和時間類型

MySQL可以使用很多類型來保存日期和時間值,例如YEAR和DATE.MySQL能存儲最小粒度為秒。但是可以使用微秒級的力度進行運算。

1、DATETIME

能保存1001到9999年,精度為秒。格式為YYYY-MM-DD HH:MM:SS與時區無關,使用八個字節的存儲空間。

2、TIMESTAMP

時間戳,正如名字一樣。它能保存從1970年1月1號午夜(格林尼治標準時間)。它只使用四個字節的存儲空間只能表示1970到2038年。

TIMESTAMP顯示的值依賴于時區。MYSQL服務器,操作系統,以及客戶端連接都有時區設置。因此存儲值為0時在不同的時區顯示值會有差別。

注:通常情況下應盡量使用TIMESTAMP,因為它比DATETIME效率更高。如果需要存儲更小粒度的時間,可以用BIGINGT或者轉換成DOUBLE類型來進行存儲。

(5)、ENUM數據類型

枚舉數據類型在內存中非常緊湊,會根據列表值的數量壓縮到一個或兩個字節。MySQL自身會維護一個查找表。例如:

CREATE TABLE enum_test(

`gender` ENUM("男","女","其他") NOT NULL

);

INSERT INTO enum_test values("男"),("女"),("其他");

對于狀態字段,可以嘗試使用?ENUM?來存放。

避免使用NULL字段,很難查詢優化且占用額外索引空間。

****************************************************華麗的分割線**************************************************************

一。char和varchar

char是固定長度的,查詢速度比varchar速度快的多。char的缺點是浪費存儲空間。

檢索char列時,返回的結果會刪除尾部空格,所以程序需要對為空格進行處理。

對于長度變化不大且對查詢速度有較高要求的數據可以考慮使用char。

隨著MySQL的不斷升級,varchar的性能不斷改進并提高。

存儲引擎使用原則:

MyISAM:建議使用固定長度列代替可變長度列。

InnoDB:建議使用varchar類型

二。text和blob

在保存大文本時,通常選擇text或者blob。

二者的差別是blob可以保存二進制數據,比如照片。

text和blob又包括text、mediumtext、longtext和blob、mediumblob、longblob,他們之間的區別是存儲文本長度不同和存儲字節不同。

應根據情況選擇滿足需求的最小存儲類型。

1.blob和text執行大量刪除操作時,產生數據“空洞”

刪除id為7記錄前后數據庫所占內存,沒有發生變化。

可以發現數據文件并沒有因為數據刪除而減少。

對表進行optimize(優化)操作:

optimize table t1;

可以發現表數據文件大大縮小,“空洞”空間已經被回收。

2.用合成(Synthetic)索引提高查詢性能

根據大文本字段(text、blob)的內容建立一個散列值,并把這個值存儲在單獨的數據列中,然后通過散列值找數據行。

缺點:只能進行精確查詢(=范圍操作符是沒有用處的)

可以通過MySQL自帶函數md5()、sha1()、crc32()生成散列值,也可以通過編程語言計算散列值。

注:如果散列算法生成的字符串帶有尾部空格,不要把他們存儲在char、varchar列中,他們會受到尾部空格去除的影響。

如果需要對blob或clob字段進行模糊查詢,可以用前綴索引:

合成索引只能用于精確匹配,在一定程度上減少了I/O,從而提高了查詢效率。

3.在不必要的時候避免檢索大型的blob或text值。

4.把blob或text列分離到單獨的表中。

三、浮點數和定點數

1.浮點數存在誤差問題。

2.對貨幣等對精度敏感的數據,應該用定點數表示或存儲。

3.在編程中,如果用到浮點數,要特別注意誤差問題,并盡量避免做浮點數比較。

4.要注意一些特殊值的處理。

四、日期類型的選擇

1.根據實際需要選擇能夠滿足應用的最小存儲日期類型。

2.如果記錄年月日時分秒,并且記錄年份比較久遠,最好使用datetime,不要使用timestamp。

3.如果記錄的日期需要讓不同時區的用戶使用,最好使用timestamp,因為日期類型中只有它能夠和實際時區相對應。

總結

以上是生活随笔為你收集整理的mysql 人名用什么类型_如何选择合适的MySQL数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。