色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

MySQL基礎教程4 —— 數據類型之存儲需求及如何選擇正確的類型

瀏覽:4日期:2023-10-17 16:01:16
1. 列類型存儲需求

根據類別列出了MySQL支持的每個列類型的存儲需求。

MyISAM表中行的最大大小為65,534字節。每個BLOB和TEXT列 賬戶只占其中的5至9個字節。

如果MyISAM表包括變長列類型,記錄格式也是可變長度。當創建表時,在某些條件下,MySQL可以將一個列從變長類型改為固定長度的類型或反之亦然。

數值類型存儲需求

列類型存儲需求TINYINT1個字節SMALLINT2個字節MEDIUMINT3個字節INT,INTEGER4個字節BIGINT8個字節FLOAT(p)如果0 <=p<= 24為4個字節,如果25 <=p<= 53為8個字節FLOAT4個字節DOUBLE [PRECISION], itemREAL8個字節DECIMAL(M,D),NUMERIC(M,D)變長;參見下面的討論BIT(M)大約(M+7)/8個字節

DECIMAL(和NUMERIC)的存儲需求與具體版本有關:

使用二進制格式將9個十進制(基于10)數壓縮為4個字節來表示DECIMAL列值。每個值的整數和分數部分的存儲分別確定。每個9位數的倍數需要4個字節,并且“剩余的”位需要4個字節的一部分。下表給出了超出位數的存儲需求:

剩余的字節位數數目00112132425363748494

日期和時間類型的存儲需求

列類型存儲需求DATE3個字節DATETIME8個字節TIMESTAMP4個字節TIME3個字節YEAR1個字節

字符串類型的存儲需求

列類型存儲需求CHAR(M)M個字節,0<=M<=255VARCHAR(M)L+1個字節,其中L<=M且0<=M<=65535(參見下面的注釋)BINARY(M)M個字節,0<=M<=255VARBINARY(M)L+1個字節,其中L<=M且0<=M<=255TINYBLOB,TINYTEXTL+1個字節,其中L< 28BLOB,TEXTL+2個字節,其中L< 216MEDIUMBLOB,MEDIUMTEXTL+3個字節,其中L< 224LONGBLOB,LONGTEXTL+4個字節,其中L< 232ENUM(’value1’,’value2’,...)1或2個字節,取決于枚舉值的個數(最多65,535個值)SET(’value1’,’value2’,...)1、2、3、4或者8個字節,取決于set成員的數目(最多64個成員)

VARCHAR、BLOB和TEXT類是變長類型。每個類型的存儲需求取決于列值的實際長度(用前面的表中的L表示),而不是該類型的最大可能的大小。例如,VARCHAR(10)列可以容納最大長度為10的字符串。實際存儲需求是字符串(L)的長度,加上一個記錄字符串長度的字節。對于字符串’abcd’,L是4,存儲需要5個字節。

對于CHAR、VARCHAR和TEXT類型,前面的表中的值L和M應解釋為字符數目,并且列定義中的這些類型的長度表示字符數目。例如,要想保存一個TINYTEXT值需要L字符+ 1個字節。

要想計算用于保存具體CHAR、VARCHAR或者TEXT列值的字節數,需要考慮該列使用的字符集。在具體情況中,當使用Unicode時,必須記住所有Unicode字符使用相同的字節數。

注釋:VARCHAR列的有效最大長度為65,532字符。

NDBCLUSTER引擎只支持固定寬度的列。這說明MySQL簇中的表中的VARCHAR列的行為如同類型CHAR(不同的是每個記錄仍然有一個額外字節空間)。例如,在Cluster表中,聲明為VARCHAR(100)的列中的每個記錄存儲時將占用101個字節,無論實際存儲的記錄中的字符串的長度為多少。

BLOB和TEXT類需要1、2、3或者4個字節來記錄列值的長度,取決于該類的最大可能的長度。

在NDB Cluster存儲引擎中,TEXT和BLOB列的實施是不同的,其中TEXT列中的每個記錄由兩個單獨部分組成。一個是固定大小(256字節),并且實際上保存在原表中。另一個包括超出256字節的任何數據,保存在隱含的表中。第2個表中的記錄總是2,000字節長。這說明如果size<= 256,TEXT列的大小為256(其中size表示記錄的大小);否則,大小是256 +size+(2000–(size–256)%2000)。

ENUM對象的大小由不同的枚舉值的數目確定。枚舉用一個字節,可以有255個可能的值。當枚舉的值位于256和65,535之間時,用兩個字節。

SET對象的大小由不同的set成員的數量確定。如果set大小是N,對象占(N+7)/8個字節,四舍五入到1、2、3、4或者8個字節。SET最多可以有64個成員。

2.選擇正確的數據類型

為了優化存儲,在任何情況下均應使用最精確的類型。例如,如果列的值的范圍為從1到99999,若使用整數,則MEDIUMINT UNSIGNED是好的類型。在所有可以表示該列值的類型中,該類型使用的存儲最少。

用精度為65位十進制數(基于10)對DECIMAL列進行所有基本計算(+、-、*、/)。

使用雙精度操作對DECIMAL值進行計算。如果準確度不是太重要或如果速度為最高優先級,DOUBLE類型即足夠了。為了達到高精度,可以轉換到保存在BIGINT中的定點類型。這樣可以用64位整數進行所有計算,根據需要將結果轉換回浮點值。

3.使用來自其他數據庫引擎的列類型

為了使用由其它賣方編寫的SQL執行代碼,MySQL按照下表所示對列類型進行映射。通過這些映射,可以很容易地從其它數據庫引擎將表定義導入到MySQL中:

其它賣方類型MySQL類型BOOL,TINYINTBOOLEANTINYINTCHAR VARYING(M)VARCHAR(M)DECDECIMALFIXEDDECIMALFLOAT4FLOATFLOAT8DOUBLEINT1TINYINTINT2SMALLINTINT3MEDIUMINTINT4INTINT8BIGINTLONG VARBINARYMEDIUMBLOBLONG VARCHARMEDIUMTEXTLONGMEDIUMTEXTMIDDLEINTMEDIUMINTNUMERICDECIMAL

在創建表時對列類型進行映射,然后原來的類型定義被丟棄。如果你使用其它賣方的類型創建一個表,然后執行DESCRIBEtbl_name語句,MySQL使用等效的MySQL類型來報告表的結構。例如:

mysql> CREATE TABLE t (a BOOL, b FLOAT8, c LONG, d NUMERIC);Query OK, 0 rows affected (0.08 sec)mysql> DESCRIBE t;+-------+---------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------------+------+-----+---------+-------+| a | tinyint(1) | YES | | NULL | || b | double | YES | | NULL | || c | mediumtext | YES | | NULL | || d | decimal(10,0) | YES | | NULL | |+-------+---------------+------+-----+---------+-------+4 rows in set (0.00 sec)

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 久久福利资源网站免费看 | 爱爱爱久久久久久久 | 欧美另类色 | 日本wwwwwwwww | 欧美怡红院免费的视频 | 亚洲精品久久精品h成人 | 国产精品久久久久一区二区三区 | 成人黄色免费网址 | 亚洲精品一区二区三区在线观看 | 亚欧毛片 | 成人在线观看网址 | 成人毛片在线观看 | 美女让我桶 | 亚洲成av人在线视 | 91国语精品自产拍在线观看一 | 日本黄大片影院一区二区 | 2020毛片| 日韩中文字幕免费观看 | 成人a毛片在线看免费全部播放 | 黄色成人在线 | 国产永久免费高清动作片www | 一个人看的免费高清视频日本 | 久久久久久久网站 | 免费一级美国片在线观看 | 99在线免费观看视频 | 中文精品久久久久国产不卡 | 97se亚洲综合在线韩国专区福利 | 亚洲综合在线观看视频 | 一区二区三区在线 | 网站 | 亚洲一区二区三区免费 | 成人国产精品一级毛片视频 | 男人和女人在床做黄的网站 | 看一级毛片一区二区三区免费 | 在线精品免费观看综合 | 国产精品高清久久久久久久 | 亚洲国产一区在线二区三区 | 男女乱淫真视频免费一级毛片 | 成年人免费在线视频观看 | 欧美精品在线视频观看 | 亚洲精品国产专区一区 | 欧美毛片aaa激情 |