下文主要給大家?guī)鞰ySQL數(shù)據(jù)類型的字符串解析,希望mysql數(shù)據(jù)類型的字符串解析能夠帶給大家實(shí)際用處,這也是我編輯這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
創(chuàng)新互聯(lián)是專業(yè)的莒南網(wǎng)站建設(shè)公司,莒南接單;提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行莒南網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
mysql數(shù)據(jù)類型——字符串char(m)和varchar(m)
char(m) 定長字符串類型 非 Unicode 字符
varchar(m) 變長字符串類型 非 Unicode 數(shù)據(jù)
說明:M為最大可存儲(chǔ)字節(jié)數(shù) 漢子占兩個(gè)字節(jié),通過指定m,來限制存儲(chǔ)的最大字符數(shù)長度,char(20)和varchar(20)將最多只能存儲(chǔ)20個(gè)字符,超過的字符將會(huì)被截掉。m必須小于該類型允許的最大字符數(shù)。
一 char(m)類型
Char(m) 最大字節(jié)數(shù)255 定長類型 m可取0-255 它的右邊填充空格以達(dá)到指定長度,當(dāng)檢索到char值時(shí),尾部的空格被刪除掉 (性別 密碼)
CHAR 類型用于定長字符串,并且必須在圓括號(hào)內(nèi)用一個(gè)大小修飾符來定義。這個(gè)大小修飾符的范圍從 0-255。
注意:比指定長度大的值將被截短,而比指定長度小的值將會(huì)用空格作填補(bǔ)。所以char類型存儲(chǔ)的字符串末尾不能有空格,varchar不受此限制。
二 varchar(m)類型
Varchar(m) 最大字節(jié)65535 可變長度 m取0-65535 只保存需要字符數(shù),另加一個(gè)字節(jié)來聲明長度 (用戶名 文章標(biāo)題)
VARCHAR 類型只使用存儲(chǔ)字符串實(shí)際需要的長度(增加一個(gè)額外字節(jié)來存儲(chǔ)字符串本身的長度)來存儲(chǔ)值。比指定長度大的值將被截短。
變化一
MySQL 數(shù)據(jù)庫的varchar類型在4.1以下的版本中的最大長度限制為255,其數(shù)據(jù)范圍可以是0~255或1~255(根據(jù)不同版本數(shù)據(jù)庫來定)。
在 MySQL5.0以上的版本中,varchar數(shù)據(jù)類型的長度支持到了65535,也就是說可以存放65532個(gè)字節(jié)的數(shù)據(jù),起始位和結(jié)束位占去了3個(gè)字 節(jié),
也就是說,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的數(shù)據(jù)可以使用可變長的varchar來存放,這樣就能有效的減少數(shù)據(jù)庫文件的大小。
變化二
MySQL 數(shù)據(jù)庫的varchar類型在4.1以下的版本中,nvarchar(存儲(chǔ)的是Unicode數(shù)據(jù)類型的字符)不管是一個(gè)字符還是一個(gè)漢字,都存為2個(gè)字節(jié) ,一般用作中文或者其他語言輸入,這樣不容易亂碼 ;
varchar: 漢字是2個(gè)字節(jié),其他字符存為1個(gè)字節(jié) ,varchar適合輸入英文和數(shù)字。
4.0版本以下,varchar(20),指的是20字節(jié),如果存放UTF8漢字時(shí),只能存6個(gè)(每個(gè)漢字3字節(jié)) ;
5.0版本以上,varchar(20),指的是20字符,無論存放的是數(shù)字、字母還是UTF8漢字(每個(gè)漢字3字節(jié)),都可以存放20個(gè),最大大小是65532字節(jié) ;
varchar(20)在Mysql4中最大也不過是20個(gè)字節(jié),但是Mysql5根據(jù)編碼不同,存儲(chǔ)大小也不同,具體有以下規(guī)則:
a) 存儲(chǔ)限制
varchar 字段是將實(shí)際內(nèi)容單獨(dú)存儲(chǔ)在聚簇索引之外,內(nèi)容開頭用1到2個(gè)字節(jié)表示實(shí)際長度(長度超過255時(shí)需要2個(gè)字節(jié)),因此最大長度不能超過65535。
b) 編碼長度限制
字符類型若為gbk,每個(gè)字符最多占2個(gè)字節(jié),最大長度不能超過32766;
字符類型若為utf8,每個(gè)字符最多占3個(gè)字節(jié),最大長度不能超過21845。
若定義的時(shí)候超過上述限制,則varchar字段會(huì)被強(qiáng)行轉(zhuǎn)為text類型,并產(chǎn)生warning。
c) 行長度限制
導(dǎo)致實(shí)際應(yīng)用中varchar長度限制的是一個(gè)行定義的長度。 MySQL要求一個(gè)行的定義長度不能超過65535。若定義的表長度超過這個(gè)值,則提示
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。
三 區(qū)別:
1.內(nèi)部存儲(chǔ)機(jī)制:
char是固定長度,char(4)不管是存一個(gè)字符,2個(gè)字符或者4個(gè)字符(英文的),都將占用4個(gè)字節(jié),不夠的用空格補(bǔ)齊
varchar是存入的實(shí)際字符數(shù)+1個(gè)字節(jié)(n<=255)或2個(gè)字節(jié)(n>255),所以varchar(4),存入一個(gè)字符將占用2個(gè)字節(jié),2個(gè)字符占用3個(gè)字節(jié),4個(gè)字符占用5個(gè)字節(jié)。
2.char類型的字符串檢索速度要比varchar類型的快
3.類型的選擇
文字字段若長度固定,如:身分證號(hào)碼,就不要用 varchar 或 nvarchar,應(yīng)該用 char 或 nchar。
文字字段若長度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲(chǔ)空間外,存取硬盤時(shí)也會(huì)較有效率。
4性能選擇
(1) varchar類型在更新環(huán)節(jié)上的系統(tǒng)開銷是遠(yuǎn)大于char類型的,所以char適合字段頻繁更新時(shí)的應(yīng)用。
(2) varchar更節(jié)省磁盤空間
(3) 大數(shù)據(jù)量提取時(shí)varchar的磁盤IO消耗更低,意味著varchar綜合查詢性能會(huì)更好,所以實(shí)際應(yīng)用中大數(shù)據(jù)量(多行)查詢返回,varchar的查詢性能比起char來要好出不少
(4)選擇char和varchar會(huì)改變整體數(shù)據(jù)結(jié)構(gòu)的算法以及存儲(chǔ)方式。在mysql應(yīng)用中,如已存在varchar字段,那么其它所有的char字段將以varchar方式存儲(chǔ)。
在MySQL中用來判斷是否需要進(jìn)行對據(jù)列類型轉(zhuǎn)換的規(guī)則
1、在一個(gè)數(shù)據(jù)表里,如果每一個(gè)數(shù)據(jù)列的長度都是固定的,那么每一個(gè)數(shù)據(jù)行的長度也將是固定的.
2、只要數(shù)據(jù)表里有一個(gè)數(shù)據(jù)列的長度的可變的,那么各數(shù)據(jù)行的長度都是可變的.
3、如果某個(gè)數(shù)據(jù)表里的數(shù)據(jù)行的長度是可變的,那么,為了節(jié)約存儲(chǔ)空間,MySQL會(huì)把這個(gè)數(shù)據(jù)表里的固定長度類型的數(shù)據(jù)列轉(zhuǎn)換為相應(yīng)的可變長度類型.
例外:長度小于4個(gè)字符的char數(shù)據(jù)列不會(huì)被轉(zhuǎn)換為varchar類型
支持多語言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問題
效率來說基本是char>varchar>text,但是如果使用的是Innodb引擎的話,推薦使用varchar代替char
char和varchar可以有默認(rèn)值,text不能指定默認(rèn)值
對于以上關(guān)于mysql數(shù)據(jù)類型的字符串解析,大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。