mysql中text與varchar與char的區別

在mysql中存儲字符型的數據的字段有text,varchar,char三種類型了,但是有些朋友分不清楚text,varchar,char它們之間的區別,下面我來給大家介紹。

char類型

CHAR列的長度固定爲創建表時聲明的長度。長度可以爲從0到255的任何值。當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。

varchar類型

VARCHAR列中的值爲可變長字符串。長度可以指定爲0到65,535之間的值。(VARCHAR的最大有效長度由最大行大小和使用的字符集確定。整體最大長度是65,532字節)。


text類型

有4種TEXT類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對應4種BLOB類型,有相同的最大長度和存儲需求。


BLOB 列被視爲二進制字符串(字節字符串)。TEXT列被視爲非二進制字符串(字符字符串)。BLOB列沒有字符集,並且排序和比較基于列值字節的數值值。TEXT列有一個字符集,並且根據字符集的 校對規則對值進行排序和比較。
在TEXT或BLOB列的存儲或檢索過程中,不存在大小寫轉換。
當未運行在嚴格模式時,如果你爲BLOB或TEXT列分配一個超過該列類型的最大長度的值值,值被截取以保證適合。如果截掉的字符不是空格,將會産生一條警告。使用嚴格SQL模式,會産生錯誤,並且值將被拒絕而不是截取並給出警告。


在大多數方面,可以將BLOB列視爲能夠足夠大的VARBINARY列。同樣,可以將TEXT列視爲VARCHAR列。BLOB和TEXT在以下幾個方面不同于VARBINARY和VARCHAR:

當保存或檢索BLOB和TEXT列的值時不刪除尾部空格。(這與VARBINARY和VARCHAR列相同)。
請注意比較時將用空格對TEXT進行擴充以適合比較的對象,正如CHAR和VARCHAR。

對于BLOB和TEXT列的索引,必須指定索引前綴的長度。對于CHAR和VARCHAR,前綴長度是可選的。

BLOB和TEXT列不能有 默認值。

LONG和LONG VARCHAR對應MEDIUMTEXT數據類型。這是爲了保證兼容性。如果TEXT列類型使用BINARY屬性,將爲列分配列字符集的二元 校對規則。
MySQL連接程序/ODBC將BLOB值定義爲LONGVARBINARY,將TEXT值定義爲LONGVARCHAR。
由于BLOB和TEXT值可能會非常長,使用它們時可能遇到一些約束:

當排序時只使用該列的前max_sort_length個字節。


max_sort_length的 默認值是1024;該值可以在啓動mysqld伺服器時使用--max_sort_length選項進行更改。參見5.3.3節,“伺服器系統變量”。
運行時增加max_sort_length的值可以在排序或組合時使更多的字節有意義。任何客戶端可以更改其會話max_sort_length變量的值:

mysql> SET max_sort_length = 2000;mysql> SELECT id, comment FROM tbl_name -> ORDER BY comment;


當你想要使超過max_sort_length的字節有意義,對含長值的BLOB或TEXT列使用GROUP BY或ORDER BY的另一種方式是將列值轉換爲固定長度的對象。標准方法是使用SUBSTRING函數。例如,下面的語句對comment列的2000個字節進行排序:
mysql> SELECT id, SUBSTRING(comment,1,2000) FROM tbl_name -> ORDER BY SUBSTRING(comment,1,2000);·

BLOB或TEXT對象的最大大小由其類型確定,但在客戶端和伺服器之間實際可以傳遞的最大值由可用記憶體數量和通信緩存區大小確定。你可以通過更改max_allowed_packet變量的值更改消息緩存區的大小,但必須同時修改伺服器和客戶端程序。例如,可以使用 mysql和mysqldump來更改客戶端的max_allowed_packet值。參見7.5.2節,“調節伺服器參數”、8.3節,“mysql:MySQL命令行工具”和8.8節,“mysqldump:數據庫備份程序”。
每個BLOB或TEXT值分別由內部分配的對象表示。這與其它列類型形成對比,後者是當打開表時爲每1列分配存儲引擎。

更多相關文章
  • 在mysql中很多朋友在寫統計count時每次可能都不一樣如,count(id) count(1) count(*)這三個統計出來的結果是一樣的,但它們之間的效能有比較過嗎?下面我來給大家舉例說明一下.表結構如下:
  • 在mysql中一般人可能不會去問int與varchar區別了,這個估計一個數字類型,一個字符類型沒有可比性了,同時他們長度也不一樣,下面我來介紹一下mysql 中int和varchar的長度一些細節吧.int從 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483
  • 下面給大家總結了一些關于CentOS系統與 Ubuntu RedHat Linux的區別,如果你對此有需要了解我們會從幾個方面來分享介紹.CentOS與Ubuntu的區別CentOS(Community ENTerprise Operating System)是Linux發行版之一,它是來自于Red ...
  • css中border:0和border:none的區別詳解
    今天發現border:none在ie6下還是有邊框,而改成border:0之後邊框就沒有了
  • 在linux中df -h和df -i的區別是什麽呢?我相信有不少的朋友會搞不清楚了,下面小編爲各位整理一篇關于它的的例子.在這裏先講講linux命令df的資料:df 命令:linux中df命令的功能是用來檢查linu
  • EC2是馬遜彈性計算雲,是一個讓使用者可以租用雲端電腦運行所需應用的系統.本文我們來看看EC2中Elastic IP 和 Public IP 的區別創建EC2實例的時候,我們可以勾選"自動分配Public IP"(原話是英文的哦~),也可以不勾選,然後手動關聯Elastic IP ...
  • 在mysql中替換與修改數據我們使用update與replace一同操作就可以了,下面給各位整理了一些常用的mysql中批量修改與替換語句,希望對大家會有所幫助.MySQL批量替換指定字段字符串語句UPDATE 數據
  • 如果要過濾html標簽多半同學都使用php的函數了,但是大家不知道是可以直接在mysql中進行去除htm標簽吧,下面一起來看看吧.mysql本身沒有去除html代碼的內置函數,但是在一些情況下,不得不在數據庫層次提取一些去除了html代碼的純文本.經過谷歌後,找到了以下兩個函數,經測試,均可用.函數 ...
一周排行
  • 小編前面了介紹過另一種命令來實現數據庫導入導出了,下面小編再給各位介紹一篇oracle數據庫中expdp和impdp導出導入的例子,希望文章可以幫助到大家.expdp和impdp是oracle從10g開始新增加的導出 ...
  • jquery jsp教程保存數據代碼jquery代碼$().ready(function(){var url="/admin/ajaxGetNewsClassFather.do";var pars ...
  • Jenkins是一個開源軟件專案,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能.Jenkins是基于Java開發的一種持續集成工具,用于監控持續重複的工作Jenkens是Java開發的持續集成系統,實現軟
  • php,curl函數組可以幫助我們把機器爲裝成人行爲來抓取網站,下面來分享兩個例子,一個是訪問http網頁,一個訪問https網頁,下面一起看看.每次要使用curl的時候,總要查一堆資料.現在將常用的幾句保存下來,省 ...
  • ppt2010制作動畫效果ppt動畫飛入效果教程
    ppt制作中少不了動畫效果了,像我們點擊一張圖片就自動飛入一些文字或圖片效果,下面一聚教程
  • 紅米Note手機如何連接電腦紅米連接電腦圖解(小米3/小米2s)
    前面我是給大家介紹過利用紅米Note連接電腦然後把手機中的照片備份到電腦中,下面我來介紹利
  • 遇到一個dedecms亂碼的問題,查了好久的原因,原來是.htaccess配置的問題,現在把這個問題描述及解決方法列出,再總結幾個DEDECMS亂碼的問題.朋友的dedecms亂碼,文件的編碼以及head裏面的met ...
  • 今天來簡單的介紹一下sql中的select into 和 insert into select 數據備份的用法 代碼如下 select * into destTbl from srcTblinsert into de
  • 現在使用thinkphp框架的同學越來越多了,但他們都己經封裝好的東西了,如果我使用like查詢都不知道如何來做,後來搜索了一下找到了解決辦法,下面我記錄一下,大家可參考.這裏主要通過舉例來說明用法:ThinkPHP
  • 一.編碼範圍1. gbk (gb2312/gb18030)x00-xff gbk雙字節編碼範圍x20-x7f asciixa1-xff 中文x80-xff 中文2. utf-8 (unicode)u4e00-u9fa