目錄
一、MySQL的資料型別
二、MYSQL資料型別的長度與範圍
三、使用建議
選擇資料類型的基本原則
char與varchar
text和blob
浮點數與定點數
首頁 資料庫 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) 參數m<65 是總個數,d<30且 d4、字串(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個字節(n< =255)或2個位元組(n>255),

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

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

1.varchar可指定n,text不能指定,內部儲存varchar是存入的實際字元數1個位元組(n<=255)或2個位元組( n>255),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是精確度,如果D<=24則為預設的FLOAT,如果D>24則會自動轉換為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#變長字串,要求M<=255Binary(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 (&#39;ab  &#39;, &#39;ab  &#39;);
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT CONCAT(v, &#39;+&#39;), CONCAT(c, &#39;+&#39;) FROM vc;
+----------------+----------------+
| CONCAT(v, &#39;+&#39;) | CONCAT(c, &#39;+&#39;) |
+----------------+----------------+
| 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

熱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

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

MySQL與其他數據庫:比較選項 MySQL與其他數據庫:比較選項 Apr 15, 2025 am 12:08 AM

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

See all articles