mysql的char和varchar類型

來源:互聯網
上載者:User

    char和varchar類型相似,但是它們的儲存和檢索方式不同。在MySQL5.0.3,它們在最大長度和是否保留尾部空格也不相同。

    char和varchar定義了字串的最大長度。例如,char(30)可以放30個字元。

    char列的長度在你建表的時候,就是你定義的固定長度。值的範圍是0~255。char值儲存的時候,右部以空格來填充到指定的長度。當檢索char的時候,會自動去掉尾部的空格。

    varchar列是變長的。在MySQL5.0.3之前可以定義的長度是0~255,之後可以定義到0~65535。在MySQL5.0.3及以後的版本中varchar列的有效長度,受行的最大值和使用的字元限制。

    對比char,varchar,加上首碼的資料長度是當做一個位元組還是兩個位元組儲存。這個首碼的長度表明了值的位元組數。如果值不超過255的話,這個列用一個位元組的長度,如果這個值可能超過255個位元組,那麼就使用兩個位元組的長度。

     如果嚴格的SQL模式沒有啟用,你分配了一個char或者varchar列超出了列的最大長度,那麼這個值就會被截短以填充列,這時候就會產生一個警告。對於截短的非空白字元,你可以設定嚴格的SQL模式,來產生一個錯誤。

     對於varchar列來說,SQL模式在啟用的時候,大量的尾部空格在插入之前都會被截短,產生一個警告。對於char列來說,不管SQL模式是否被啟用,都會靜默地去掉插入值的過量的尾部空格。

    varchar值儲存的時候是不會填充的。如何處理尾部空格,取決於版本。在MySQL5.0.3中,當值儲存和檢索的時候,保留尾部空格,和標準的SQL保持一致。在MySQL5.0.3之前,值被儲存到varchar列的時候,尾部空格會被剔除。這樣也就意味著檢索值的時候,也不存在這些空格。

    在MySQL5.0.3之前,如果你需要一個不去掉尾部空格的資料類型的時候,要考慮BLOB或者TEXT類型。同樣當你儲存加密資料或者壓縮資料的時候,也要使用BLOB列,而不是char或者varchar列,來避免需要改變值的時候,尾部空格的潛在問題。

    下面的表格來說明char和varchar的儲存方式和顯示結果的差別。(假設列用的很簡單的字元,使用latin1編碼)

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.