搜尋
首頁資料庫mysql教程mysql的資料型別有哪些?

mysql的資料型別有哪些?

Sep 27, 2020 pm 05:00 PM
mysql資料類型

mysql資料類型有:BOOL、TINY INT、INT、BIG INT、FLOAT、DOUBLE、DECIMAL、CHAR、VARCHAR、TINY TEXT、TEXT、Date、DateTime、TimeStamp、Year等。

mysql的資料型別有哪些?

一、MySQL的資料型別

#主要包含以下五大類:

整數型別:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT

浮點數類型:FLOAT、DOUBLE、DECIMAL

字串類型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT 、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB

日期類型:Date、DateTime、TimeStamp、Time、Year

其他資料類型:BINARY、VARBINARY、ENUM、SET、Geometry、Point 、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等

1、整數

MySQL資料類型意義(有符號)tinyint(m)1個位元組  範圍(-128~127)smallint(m)2個位元組  範圍(-32768~32767)mediumint(m)#3個位元組  範圍( -8388608~8388607)int(m)4個位元組  範圍(-2147483648~2147483647)
#MySQL資料類型

## bigint(m)

8個位元組  範圍( -9.22*10的18次方)

取值範圍如果加了unsigned,則最大數值翻倍,如tinyint unsigned的值範圍為(0~256)。  int(m)裡的m是表示SELECT查詢結果集中的顯示寬度,並不影響實際的取值範圍,沒有影響到顯示的寬度,不知道這個m有什麼用。 2、浮點型(float和double)#MySQL資料型別float(m,d)單一精確度浮點型    8位元精確度(4位元組)     m總個數,d小數位

#double(m,d)

雙精確度浮點型    16位元精確度(8位元組)    m總個數,d小數位

#設一個字段定義為float(6,3),如果插入一個數123.45678,實際資料庫裡存的是123.457,但總個數還以實際為準,即6位。整數部分最大是3位,如果插入數12.123456,儲存的是12.1234,如果插入12.12,儲存的是12.1200.

3、定點數

型在資料庫中存放的是近似值,而定點類型在資料庫中存放的是精確值。 decimal(m,d) 參數m4、字串(char,varchar,_text)MySQL資料型別意思char(n)固定長度,最多255個字元varchar(n)固定長度,最多65535個字元tinytext#可變長度,最多255個字元text#可變長度,最多65535個字元mediumtext可變長度,最多2的24次方-1個字元
###longtext######可變長度,最多2的32次方-1個字元#############

char與varchar:

1.char(n) 若存入字元數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char型別儲存的字串結尾不能有空格,varchar不只限於此。

2.char(n) 固定長度,char(4)不管是存入幾個字符,都將佔用4個字節,varchar是存入的實際字符數1個字節(n255),

所以varchar(4),存入3個字元將佔用4個位元組。 

3.char類型的字串檢索速度比varchar類型的快。
varchar和text: 

1.varchar可指定n,text不能指定,內部儲存varchar是存入的實際字元數1個位元組(n255),text是實際字元數2個字

#節。 

2.text類型不能有預設值。 

3.varchar可直接建立索引,text建立索引要指定前面多少個字元。 varchar查詢速度快於text,在都創建索引的情況下,text的索引似乎不起作用。

5.二進位資料(_Blob)

1._BLOB和_text儲存方式不同,_TEXT以文字方式存儲,英文儲存區分大小寫,而_Blob是以二進位方式存儲,不分大小寫。

2._BLOB儲存的資料只能整體讀出。 

3._TEXT可以指定字元集,_BLO不用指定字元集。

6.日期時間類型

#MySQL資料類型 含義
#date 日期'2008-12-2'
#time 時間'12:25:36'
#datetime 日期時間'2008-12-2 22:06:44'
timestamp #自動存儲記錄修改時間

若定義一個欄位為timestamp,這個欄位裡的時間資料會隨其他欄位修改的時候自動刷新,所以這個資料類型的欄位可以存放這筆記錄最後被修改的時間。

資料類型的屬性

##CHARACTER SET name

二、MYSQL資料型別的長度與範圍

各資料型別及位元組長度一覽表:

MySQL關鍵字 意思
NULL 資料列可包含NULL值
NOT NULL #資料列不允許包含NULL值
DEFAULT 預設值
PRIMARY KEY #主鍵
AUTO_INCREMENT # 自動遞增,適用於整數型別
UNSIGNED 無符號
## 指定一個字符集
##資料型別位元組長度範圍或用法Bit1無符號[0,255],有符號[-128,127] ,天緣部落格備註:BIT與BOOL布林型都佔用1位元組#TinyInt1整數[0,255]SmallInt2#無符號[0,65535],有符號[-32768,32767]## MediumInt3無符號[0,2^24-1],有符號[-2^23,2^23-1]]Int4無符號[0,2^32-1],有符號[-2^31,2^31-1]BigInt8無符號[0,2^64-1],有符號[-2^63 ,2^63 -1]Float(M,D)4單一精確度浮點數。天緣部落格提醒這裡的D是精確度,如果D24則會自動轉換為DOUBLE型。 Double(M,D)8 雙精確度浮點。 Decimal(M,D)M 1或M 2未包裝的浮點數,用法類似FLOAT和DOUBLE,天緣部落格提醒您如果在ASP使用到Decimal資料類型,直接從資料庫讀出來的Decimal可能需要先轉換成Float或Double類型後再運算。 Date3以YYYY-MM-DD的格式顯示,例如:2009-07-19#Date Time8以YYYY-MM-DD HH:MM:SS的格式顯示,例如:2009-07-19 11:22:30TimeStamp4以YYYY-MM-DD的格式顯示,例如:2009-07-19#Time3以HH:MM:SS的格式顯示。例如:11:22:30Year1以YYYY的格式顯示。例如:2009Char(M)MVarChar(M)M#變長字串,要求MBinary(M)M類似Char的二進位存儲,特點是插入定長不足補0##VarBinary(M )Tiny TextTextMedium Text##Long TextMax:4G 大小寫不敏感TinyBlob#Max:255大小寫敏感BlobMax:64K大小寫敏感#MediumBlob##Max:16MMax:4G##Enum1或2最大可達65535個不同的枚舉值Set可達8最大可達64個不同的值Geometry         
定長字串。

M 類似VarChar的變長二進位存儲,特點是定長不補0
#Max :255 大小寫不敏感
#Max:64K 大小寫不敏感
Max:16M 大小寫不敏感
##大小寫敏感 LongBlob
大小寫敏感
##Point ## 
LineString
Polygon  
MultiPoint
MultiLineString
MultiPolygon  
GeometryCollection
#

三、使用建議

1、在指定資料類型的時候一般是採用從小原則,例如能用TINY INT的最好就不用INT,能用FLOAT類型的就不用DOUBLE類型,這樣會對MYSQL在運作效率上提高很大,尤其是在大數據量測試條件下。

2、不需要把資料表設計的太過複雜,功能模組上區分或許對於後期的維護更為方便,慎重出現大雜燴資料表

3、資料表和欄位的取名字也是一門學問

4、設計資料表結構之前請先想像一下是你的房間,或許結果會更加合理、高效

5、資料庫的最後設計結果一定是效率和可擴展性的折中,偏向任何一方都是欠妥的

選擇資料類型的基本原則

前提:使用適合儲存引擎。

選擇原則:根據選定的儲存引擎,決定如何選擇合適的資料類型。

下面的選擇方法按儲存引擎分類:

  • MyISAM 資料儲存引擎和資料列:MyISAM資料表,最好使用固定長度(CHAR)的資料列來代替可變長度(VARCHAR)的資料列。
  • MEMORY儲存引擎和資料列:MEMORY資料表目前都使用固定長度的資料行存儲,因此無論使用CHAR或VARCHAR列都沒有關係。兩者都是作為CHAR類型處理的。
  • InnoDB 儲存引擎和資料列:建議使用 VARCHAR類型。

對於InnoDB資料表,內部的行儲存格式沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此本質上,使用固定長度的CHAR欄位不一定比使用可變長度VARCHAR欄位簡單。因而,主要的效能因素是資料行使用的儲存總量。由於CHAR平均佔用的空間多於VARCHAR,因為 此使用VARCHAR來最小化需要處理的資料行的儲存總量和磁碟I/O是比較好的。

下面說一下固定長度資料列與可變長度的資料列。

char與varchar

CHAR和VARCHAR類型類似,但它們保存和擷取的方式不同。它們的最大長度和是否尾部空格保留等方面也不同。在儲存或檢索過程中不進行大小寫轉換。

下面的表格顯示了將各種字串值儲存到CHAR(4)和VARCHAR(4)欄位後的結果,說明了CHAR和VARCHAR之間的差異:

##'abcd' 5個位元組#

請注意上表中最後一行的值只適用不使用嚴格模式時;如果MySQL運行在嚴格模式,超過列長度不的值保存 ,並且會出現錯誤。

從CHAR(4)和VARCHAR(4)列檢索的值並不總是相同,因為檢索時從CHAR列刪除了尾部的空格。透過下面的範例說明該差異:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
Query OK, 0 rows affected (0.02 sec)
 
mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;
+----------------+----------------+
| CONCAT(v, '+') | CONCAT(c, '+') |
+----------------+----------------+
| ab  +          | ab+            |
+----------------+----------------+
1 row in set (0.00 sec)

text和blob

在使用text和blob欄位類型時要注意以下幾點,以便更好的發揮資料庫的效能。

①BLOB和TEXT值也會造成自己的一些問題,特別是執行了大量的刪除或更新操作的時候。刪除這種值會在資料表中留下很大的"空洞",以後填入這些"空洞"的記錄可能長度不同,為了提高效能,建議定期使用OPTIMIZE TABLE 功能對這類表進行碎片整理.

②使用合成的(synthetic)索引。合成的索引列在某些時候是有用的。一種辦法是根據其它的列的內容建立一個雜湊值,並將這個值儲存在單獨的資料列中。接下來你就可以透過檢索散列值找到資料行了。但是,我們要注意這種技術只能用於精確匹配的查詢(散列值對於類似=等範圍搜尋操作符 是沒有用處的)。我們可以使用MD5()函數產生雜湊值,也可以使用SHA1()或CRC32(),或使用自己的應用程式邏輯來計算雜湊值。請記住數值型雜湊值可以高效率地儲存。同樣,如果雜湊演算法產生的字串帶有尾部空格,就不要把它們儲存在CHAR或VARCHAR列中,它們會受到尾部空格移除的影響。

合成的雜湊索引對於那些BLOB或TEXT資料列特別有用。用雜湊標識符值查找的速度比搜尋BLOB列本身的速度快很多。

③在不必要的時候避免檢索大型的BLOB或TEXT值。例如,SELECT *查詢就不是很好的想法,除非你能夠確定作為約束條件的WHERE子句只會找到所需的資料行。否則,你可能會毫無目的地在網路上傳輸大量的值。這也是 BLOB或TEXT標識符資訊儲存在合成的索引列中對我們有幫助的例子。你可以搜尋索引列,決定那些需要的資料行,然後從合格的資料行中擷取BLOB或 TEXT值。

④把BLOB或TEXT列分離到單獨的表格中。在某些環境中,如果把這些資料列移到第二張資料表中,可以讓你把原始資料表中 的資料列轉換為固定長度的資料行格式,那麼它就是有意義的。這會減少主表中的碎片,使你得到固定長度資料行的效能優勢。它還使你在主資料表上執行 SELECT *查詢的時候不會透過網路傳輸大量的BLOB或TEXT值。

浮點數與定點數

為了能夠引起大家的重視,在介紹浮點數與定點數以前先讓大家看一個例子:

mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+-----------+-----------+
| c1        | c2        |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)

從上面的例子中我們看到c1列的值由131072.32變成了131072.31,這就是浮點數的不精確性造成的。

在mysql中float、double(或real)是浮點數,decimal(或numberic)是定點數。

浮點數相對於定點數的優點是在長度一定的情況下,浮點數能夠表示更大的資料範圍;它的缺點是會造成精確度問題。在今後關於浮點數和定點數的應用中,大家要記住以下幾點:

  1. #浮點數存在誤差問題;
  2. 對貨幣等對精度敏感的數據,應該用定點數表示或儲存;
  3. 程式設計中,如果用到浮點數,要特別注意誤差問題,並儘量避免做浮點數比較;
  4. 要注意浮點數中一些特殊值的處理。
CHAR(4) #儲存需求 VARCHAR(4) 儲存需求
'' '    ' 4個位元組 '' 1個位元組
#'ab' 'ab  ' 4個位元組 'ab ' 3個位元組
'abcd' 'abcd' 4個位元組 'abcd' 5個字節
'abcdefgh' 'abcd' #4個位元組

以上是mysql的資料型別有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL中有哪些不同的存儲引擎?MySQL中有哪些不同的存儲引擎?Apr 26, 2025 am 12:27 AM

mysqloffersvariousStorageengines,每個suitedfordferentusecases:1)InnodBisidealForapplicationsNeedingingAcidComplianCeanDhighConcurncurnency,supportingtransactionsancions and foreignkeys.2)myisamisbestforread-Heavy-Heavywyworks,lackingtransactionsactionsacupport.3)記憶

MySQL中有哪些常見的安全漏洞?MySQL中有哪些常見的安全漏洞?Apr 26, 2025 am 12:27 AM

MySQL中常見的安全漏洞包括SQL注入、弱密碼、權限配置不當和未更新的軟件。 1.SQL注入可以通過使用預處理語句防止。 2.弱密碼可以通過強制使用強密碼策略避免。 3.權限配置不當可以通過定期審查和調整用戶權限解決。 4.未更新的軟件可以通過定期檢查和更新MySQL版本來修補。

您如何確定MySQL中的慢速查詢?您如何確定MySQL中的慢速查詢?Apr 26, 2025 am 12:15 AM

在MySQL中識別慢查詢可以通過啟用慢查詢日誌並設置閾值來實現。 1.啟用慢查詢日誌並設置閾值。 2.查看和分析慢查詢日誌文件,使用工具如mysqldumpslow或pt-query-digest進行深入分析。 3.優化慢查詢可以通過索引優化、查詢重寫和避免使用SELECT*來實現。

如何監視MySQL Server的健康和性能?如何監視MySQL Server的健康和性能?Apr 26, 2025 am 12:15 AM

要監控MySQL服務器的健康和性能,應關注系統健康、性能指標和查詢執行。 1)監控系統健康:使用top、htop或SHOWGLOBALSTATUS命令查看CPU、內存、磁盤I/O和網絡活動。 2)追踪性能指標:監控查詢每秒數、平均查詢時間和緩存命中率等關鍵指標。 3)確保查詢執行優化:啟用慢查詢日誌,記錄並優化執行時間超過設定閾值的查詢。

比較和對比Mysql和Mariadb。比較和對比Mysql和Mariadb。Apr 26, 2025 am 12:08 AM

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

MySQL的許可與其他數據庫系統相比如何?MySQL的許可與其他數據庫系統相比如何?Apr 25, 2025 am 12:26 AM

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

您什麼時候選擇InnoDB而不是Myisam,反之亦然?您什麼時候選擇InnoDB而不是Myisam,反之亦然?Apr 25, 2025 am 12:22 AM

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中解釋外鍵的目的。在MySQL中解釋外鍵的目的。Apr 25, 2025 am 12:17 AM

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具