您好,登錄后才能下訂單哦!
下文主要給大家帶來mysql數據類型的字符串解析,希望mysql數據類型的字符串解析能夠帶給大家實際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
mysql數據類型——字符串char(m)和varchar(m)
char(m) 定長字符串類型 非 Unicode 字符
varchar(m) 變長字符串類型 非 Unicode 數據
說明:M為最大可存儲字節數 漢子占兩個字節,通過指定m,來限制存儲的最大字符數長度,char(20)和varchar(20)將最多只能存儲20個字符,超過的字符將會被截掉。m必須小于該類型允許的最大字符數。
一 char(m)類型
Char(m) 最大字節數255 定長類型 m可取0-255 它的右邊填充空格以達到指定長度,當檢索到char值時,尾部的空格被刪除掉 (性別 密碼)
CHAR 類型用于定長字符串,并且必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的范圍從 0-255。
注意:比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補。所以char類型存儲的字符串末尾不能有空格,varchar不受此限制。
二 varchar(m)類型
Varchar(m) 最大字節65535 可變長度 m取0-65535 只保存需要字符數,另加一個字節來聲明長度 (用戶名 文章標題)
VARCHAR 類型只使用存儲字符串實際需要的長度(增加一個額外字節來存儲字符串本身的長度)來存儲值。比指定長度大的值將被截短。
變化一
MySQL 數據庫的varchar類型在4.1以下的版本中的最大長度限制為255,其數據范圍可以是0~255或1~255(根據不同版本數據庫來定)。
在 MySQL5.0以上的版本中,varchar數據類型的長度支持到了65535,也就是說可以存放65532個字節的數據,起始位和結束位占去了3個字 節,
也就是說,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的數據可以使用可變長的varchar來存放,這樣就能有效的減少數據庫文件的大小。
變化二
MySQL 數據庫的varchar類型在4.1以下的版本中,nvarchar(存儲的是Unicode數據類型的字符)不管是一個字符還是一個漢字,都存為2個字節 ,一般用作中文或者其他語言輸入,這樣不容易亂碼 ;
varchar: 漢字是2個字節,其他字符存為1個字節 ,varchar適合輸入英文和數字。
4.0版本以下,varchar(20),指的是20字節,如果存放UTF8漢字時,只能存6個(每個漢字3字節) ;
5.0版本以上,varchar(20),指的是20字符,無論存放的是數字、字母還是UTF8漢字(每個漢字3字節),都可以存放20個,最大大小是65532字節 ;
varchar(20)在Mysql4中最大也不過是20個字節,但是Mysql5根據編碼不同,存儲大小也不同,具體有以下規則:
a) 存儲限制
varchar 字段是將實際內容單獨存儲在聚簇索引之外,內容開頭用1到2個字節表示實際長度(長度超過255時需要2個字節),因此最大長度不能超過65535。
b) 編碼長度限制
字符類型若為gbk,每個字符最多占2個字節,最大長度不能超過32766;
字符類型若為utf8,每個字符最多占3個字節,最大長度不能超過21845。
若定義的時候超過上述限制,則varchar字段會被強行轉為text類型,并產生warning。
c) 行長度限制
導致實際應用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
三 區別:
1.內部存儲機制:
char是固定長度,char(4)不管是存一個字符,2個字符或者4個字符(英文的),都將占用4個字節,不夠的用空格補齊
varchar是存入的實際字符數+1個字節(n<=255)或2個字節(n>255),所以varchar(4),存入一個字符將占用2個字節,2個字符占用3個字節,4個字符占用5個字節。
2.char類型的字符串檢索速度要比varchar類型的快
3.類型的選擇
文字字段若長度固定,如:身分證號碼,就不要用 varchar 或 nvarchar,應該用 char 或 nchar。
文字字段若長度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節省存儲空間外,存取硬盤時也會較有效率。
4性能選擇
(1) varchar類型在更新環節上的系統開銷是遠大于char類型的,所以char適合字段頻繁更新時的應用。
(2) varchar更節省磁盤空間
(3) 大數據量提取時varchar的磁盤IO消耗更低,意味著varchar綜合查詢性能會更好,所以實際應用中大數據量(多行)查詢返回,varchar的查詢性能比起char來要好出不少
(4)選擇char和varchar會改變整體數據結構的算法以及存儲方式。在mysql應用中,如已存在varchar字段,那么其它所有的char字段將以varchar方式存儲。
在MySQL中用來判斷是否需要進行對據列類型轉換的規則
1、在一個數據表里,如果每一個數據列的長度都是固定的,那么每一個數據行的長度也將是固定的.
2、只要數據表里有一個數據列的長度的可變的,那么各數據行的長度都是可變的.
3、如果某個數據表里的數據行的長度是可變的,那么,為了節約存儲空間,MySQL會把這個數據表里的固定長度類型的數據列轉換為相應的可變長度類型.
例外:長度小于4個字符的char數據列不會被轉換為varchar類型
支持多語言的站點應考慮使用 Unicode nchar 或 nvarchar 數據類型以盡量減少字符轉換問題
效率來說基本是char>varchar>text,但是如果使用的是Innodb引擎的話,推薦使用varchar代替char
char和varchar可以有默認值,text不能指定默認值
對于以上關于mysql數據類型的字符串解析,大家是不是覺得非常有幫助。如果需要了解更多內容,請繼續關注我們的行業資訊,相信你會喜歡上這些內容的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。