搜尋
首頁資料庫mysql教程mysql中關於char和varchar的區別

mysql中關於char和varchar的區別

Sep 07, 2017 pm 01:12 PM
charmysqlvarchar

在mysql教程中char與varchar的差別呢,都是用來儲存字串的,只是他們的保存方式不一樣罷了,char有固定的長度,而varchar屬於可變長的字元類型。

char與varchar的區別

char (13)長度固定, 如'www.jb51.net' 儲存需要空間12個字元

varchar(13 ) 可變長如'www.jb51.net' 需要儲存空間13字元,

從上面可以看得出來char 長度是固定的,不管你儲存的資料是多少他都會都固定的長度。而varchar則處可變長度但他要在總長度上加1字符,這個用來儲存位置。所以實際應用程式中使用者可以根據自己的資料類型來做。

再看看char,與varchar在速度上的差別吧。

程式碼如下:

mysal>create tabe ab(v varchar(4),c char(4)); 
query ok ,0 rows affected(0.02 sec) 
mysql>insert into abc values('ab ','ab ') 
query ok ,1 row affected(0.00 sec); 
mysql->select concat(v ,'+') ,concat(c ,'+') form abc 
ab + | ab+ 
1rows in set (0.00 sec)


從上面可以看出來,由於某種原因char 固定長度,所以在處理速度上要比varchar快速很多,但是對費存儲空間,所以對存儲不大,但在速度上有要求的可以使用char類型,反之可以用varchar類型來實例。

註明:

在用char字元類型時內容後面有空間時必須作相關處理,要不要把空格自動刪除。

建意:

myisam 儲存引擎 建議使用固定長度,資料列取代可變長度的資料列。
memory存儲引擎目前都使用固定資料行存儲,因此無論使用char varchar列都沒關係,
innodb 存儲引擎建意使用varchar 類型


以下是其它網友的補充

char是一種固定長度的類型,varchar則是一種可變長度的類型
  char(M)類型的資料列裡,每個值都佔用M個位元組,如果某個長度小於M,MySQL就會在它的右邊用空格字元補足. (在檢索作業中那些填補出來的空格字元會被去掉)在varchar(M)類型的資料列裡,每個值只佔用剛好夠用的位元組再加上一個用來記錄其長度的位元組(即總長度為L+1位元組).

在MySQL中用來判斷是否需要進行對據列型別轉換的規則

  1、在一個資料表裡,如果每一個資料列的長度都是固定的,那麼每一個資料行的長度也將是固定的.
  2、只要資料表裡有一個資料列的長度的可變的,那麼各資料行的長度都是可變的.
  3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節省儲存空間,MySQL會把這個資料表裡的固定長度類型的資料列轉換為對應的可變長度類型.
例外:長度小於4個字元的char資料列不會被轉換為varchar類型

  對於MyISAM表,盡量使用Char,對於那些經常需要修改而容易形成碎片的myisam和isam資料表就更是如此,它的缺點就是佔用磁碟空間

  對於InnoDB表,因為它的資料行內部儲存格式對固定長度的資料行和可變長度的資料行不加區分(所有資料行共用一個表頭部分,這個標頭部分存放著指向各有關資料列的指標),所以使用char類型不見得比使用varchar類型好。事實上,因為char類型通常要比varchar類型佔用更多的空間,所以從減少空間佔用量和減少磁碟i/o的角度,使用varchar類型反而更有利.

文章2:
字元應該是最常見的一種了,但似乎各個資料庫都有所不同,例如oracle中就有啥varchar2之類。不過mysql似乎最多的還是集中在char和varchar。
說說區別。 char是固定長度的,而varchar會根據特定的長度來使用儲存空間。例如char(255)和varchar(255),在儲存字串"hello world"的時候,char會用一塊255的空間放那個11個字符,而varchar就不會用255個,他先計算長度後只用11個再加上計算的到字串長度信息,一般1-2個byte來,這樣varchar在儲存不確定長度的時候會大大減少儲存空間。

如此看來varchar比char聰明多了,那char有用武之地嗎?還是很不少的優勢。

一,儲存很短的訊息,例如門牌號碼101,201…這樣很短的訊息應該用char,因為varchar還要佔個byte用於儲存資訊長度,本來打算節約儲存的現在得不償失。

二,固定長度的。例如使用uuid當主鍵,那用char應該比較適合。因為他固定長度,varchar動態根據長度的特性就消失了,而且還要佔個長度資訊。

三,十分頻繁改變的column。因為varchar每次儲存都要有額外的計算,得到長度等工作,如果一個非常頻繁改變的,那就要有很多的精力用於計算,而這些對於char來說是不需要的。


還有一個關於varchar的問題是,varchar他既然可以自動適應儲存空間,那我varchar(8)和varchar(255)儲存應該都是一樣的,那麼每次表設計的時候往大的方向去好了,免得以後不夠用麻煩。這個思路對嗎?答案是否定的。 mysql會把表格資訊放到記憶體(查詢第一次後,就快取住了,linux下很明顯,但windows下似乎沒有,不知道為啥),這時記憶體的申請是按照固定長度來的,如果varchar很大就會有問題。所以還是應該按需索取。

總結:仔細看DZ的資料表,定長的欄位基本上還都是用char....

以上是mysql中關於char和varchar的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL和其他SQL方言之間的語法有什麼區別?MySQL和其他SQL方言之間的語法有什麼區別?Apr 27, 2025 am 12:26 AM

mysqldiffersfromothersqldialectsinsyntaxforlimit,自動啟動,弦樂範圍,子征服和表面上分析。 1)MySqluessLipslimit,whilesqlserverusestopopandoraclesrontersrontsrontsrontsronnum.2)

什麼是mysql分區?什麼是mysql分區?Apr 27, 2025 am 12:23 AM

MySQL分區能提升性能和簡化維護。 1)通過按特定標準(如日期範圍)將大表分成小塊,2)物理上將數據分成獨立文件,3)查詢時MySQL可專注於相關分區,4)查詢優化器可跳過不相關分區,5)選擇合適的分區策略並定期維護是關鍵。

您如何在MySQL中授予和撤銷特權?您如何在MySQL中授予和撤銷特權?Apr 27, 2025 am 12:21 AM

在MySQL中,如何授予和撤銷權限? 1.使用GRANT語句授予權限,如GRANTALLPRIVILEGESONdatabase_name.TO'username'@'host';2.使用REVOKE語句撤銷權限,如REVOKEALLPRIVILEGESONdatabase_name.FROM'username'@'host',確保及時溝通權限變更。

說明InnoDB和Myisam存儲引擎之間的差異。說明InnoDB和Myisam存儲引擎之間的差異。Apr 27, 2025 am 12:20 AM

InnoDB適合需要事務支持和高並發性的應用,MyISAM適合讀多寫少的應用。 1.InnoDB支持事務和行級鎖,適用於電商和銀行系統。 2.MyISAM提供快速讀取和索引,適合博客和內容管理系統。

MySQL中有哪些不同類型的連接?MySQL中有哪些不同類型的連接?Apr 27, 2025 am 12:13 AM

MySQL中有四種主要的JOIN類型:INNERJOIN、LEFTJOIN、RIGHTJOIN和FULLOUTERJOIN。 1.INNERJOIN返回兩個表中符合JOIN條件的所有行。 2.LEFTJOIN返回左表中的所有行,即使右表中沒有匹配的行。 3.RIGHTJOIN與LEFTJOIN相反,返回右表中的所有行。 4.FULLOUTERJOIN返回兩個表中所有符合或不符合JOIN條件的行。

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*來實現。

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

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

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具