mysql數(shù)據(jù)類(lèi)型的字符串解析

下文主要給大家?guī)?lái)MySQL數(shù)據(jù)類(lèi)型的字符串解析,希望mysql數(shù)據(jù)類(lèi)型的字符串解析能夠帶給大家實(shí)際用處,這也是我編輯這篇文章的主要目的。好了,廢話(huà)不多說(shuō),大家直接看下文吧。

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的莒南網(wǎng)站建設(shè)公司,莒南接單;提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行莒南網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

mysql數(shù)據(jù)類(lèi)型——字符串char(m)和varchar(m)

char(m)     定長(zhǎng)字符串類(lèi)型  非 Unicode 字符
varchar(m)   變長(zhǎng)字符串類(lèi)型  非 Unicode 數(shù)據(jù)

說(shuō)明:M為最大可存儲(chǔ)字節(jié)數(shù) 漢子占兩個(gè)字節(jié),通過(guò)指定m,來(lái)限制存儲(chǔ)的最大字符數(shù)長(zhǎng)度,char(20)和varchar(20)將最多只能存儲(chǔ)20個(gè)字符,超過(guò)的字符將會(huì)被截掉。m必須小于該類(lèi)型允許的最大字符數(shù)。

mysql數(shù)據(jù)類(lèi)型的字符串解析

一 char(m)類(lèi)型
Char(m)   最大字節(jié)數(shù)255    定長(zhǎng)類(lèi)型  m可取0-255 它的右邊填充空格以達(dá)到指定長(zhǎng)度,當(dāng)檢索到char值時(shí),尾部的空格被刪除掉        (性別 密碼)
CHAR 類(lèi)型用于定長(zhǎng)字符串,并且必須在圓括號(hào)內(nèi)用一個(gè)大小修飾符來(lái)定義。這個(gè)大小修飾符的范圍從 0-255。
注意:比指定長(zhǎng)度大的值將被截短,而比指定長(zhǎng)度小的值將會(huì)用空格作填補(bǔ)。所以char類(lèi)型存儲(chǔ)的字符串末尾不能有空格,varchar不受此限制。

二 varchar(m)類(lèi)型
Varchar(m) 最大字節(jié)65535 可變長(zhǎng)度  m取0-65535 只保存需要字符數(shù),另加一個(gè)字節(jié)來(lái)聲明長(zhǎng)度                                               (用戶(hù)名 文章標(biāo)題)
VARCHAR 類(lèi)型只使用存儲(chǔ)字符串實(shí)際需要的長(zhǎng)度(增加一個(gè)額外字節(jié)來(lái)存儲(chǔ)字符串本身的長(zhǎng)度)來(lái)存儲(chǔ)值。比指定長(zhǎng)度大的值將被截短。

變化一
 MySQL 數(shù)據(jù)庫(kù)的varchar類(lèi)型在4.1以下的版本中的最大長(zhǎng)度限制為255,其數(shù)據(jù)范圍可以是0~255或1~255(根據(jù)不同版本數(shù)據(jù)庫(kù)來(lái)定)。
在 MySQL5.0以上的版本中,varchar數(shù)據(jù)類(lèi)型的長(zhǎng)度支持到了65535,也就是說(shuō)可以存放65532個(gè)字節(jié)的數(shù)據(jù),起始位和結(jié)束位占去了3個(gè)字 節(jié),
也就是說(shuō),在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的數(shù)據(jù)可以使用可變長(zhǎng)的varchar來(lái)存放,這樣就能有效的減少數(shù)據(jù)庫(kù)文件的大小。

變化二
MySQL 數(shù)據(jù)庫(kù)的varchar類(lèi)型在4.1以下的版本中,nvarchar(存儲(chǔ)的是Unicode數(shù)據(jù)類(lèi)型的字符)不管是一個(gè)字符還是一個(gè)漢字,都存為2個(gè)字節(jié) ,一般用作中文或者其他語(yǔ)言輸入,這樣不容易亂碼 ;
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字符,無(wú)論存放的是數(shù)字、字母還是UTF8漢字(每個(gè)漢字3字節(jié)),都可以存放20個(gè),最大大小是65532字節(jié) ;
varchar(20)在Mysql4中最大也不過(guò)是20個(gè)字節(jié),但是Mysql5根據(jù)編碼不同,存儲(chǔ)大小也不同,具體有以下規(guī)則:

a) 存儲(chǔ)限制
varchar 字段是將實(shí)際內(nèi)容單獨(dú)存儲(chǔ)在聚簇索引之外,內(nèi)容開(kāi)頭用1到2個(gè)字節(jié)表示實(shí)際長(zhǎng)度(長(zhǎng)度超過(guò)255時(shí)需要2個(gè)字節(jié)),因此最大長(zhǎng)度不能超過(guò)65535。
b) 編碼長(zhǎng)度限制
字符類(lèi)型若為gbk,每個(gè)字符最多占2個(gè)字節(jié),最大長(zhǎng)度不能超過(guò)32766;
字符類(lèi)型若為utf8,每個(gè)字符最多占3個(gè)字節(jié),最大長(zhǎng)度不能超過(guò)21845。
若定義的時(shí)候超過(guò)上述限制,則varchar字段會(huì)被強(qiáng)行轉(zhuǎn)為text類(lèi)型,并產(chǎn)生warning。
c) 行長(zhǎng)度限制
導(dǎo)致實(shí)際應(yīng)用中varchar長(zhǎng)度限制的是一個(gè)行定義的長(zhǎng)度。 MySQL要求一個(gè)行的定義長(zhǎng)度不能超過(guò)65535。若定義的表長(zhǎng)度超過(guò)這個(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是固定長(zhǎng)度,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類(lèi)型的字符串檢索速度要比varchar類(lèi)型的快

3.類(lèi)型的選擇
文字字段若長(zhǎng)度固定,如:身分證號(hào)碼,就不要用 varchar 或 nvarchar,應(yīng)該用 char 或 nchar。
文字字段若長(zhǎng)度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲(chǔ)空間外,存取硬盤(pán)時(shí)也會(huì)較有效率。

4性能選擇
(1) varchar類(lèi)型在更新環(huán)節(jié)上的系統(tǒng)開(kāi)銷(xiāo)是遠(yuǎn)大于char類(lèi)型的,所以char適合字段頻繁更新時(shí)的應(yīng)用。
(2) varchar更節(jié)省磁盤(pán)空間
(3) 大數(shù)據(jù)量提取時(shí)varchar的磁盤(pán)IO消耗更低,意味著varchar綜合查詢(xún)性能會(huì)更好,所以實(shí)際應(yīng)用中大數(shù)據(jù)量(多行)查詢(xún)返回,varchar的查詢(xún)性能比起char來(lái)要好出不少
(4)選擇char和varchar會(huì)改變整體數(shù)據(jù)結(jié)構(gòu)的算法以及存儲(chǔ)方式。在mysql應(yīng)用中,如已存在varchar字段,那么其它所有的char字段將以varchar方式存儲(chǔ)。

在MySQL中用來(lái)判斷是否需要進(jìn)行對(duì)據(jù)列類(lèi)型轉(zhuǎn)換的規(guī)則

  1、在一個(gè)數(shù)據(jù)表里,如果每一個(gè)數(shù)據(jù)列的長(zhǎng)度都是固定的,那么每一個(gè)數(shù)據(jù)行的長(zhǎng)度也將是固定的.
   2、只要數(shù)據(jù)表里有一個(gè)數(shù)據(jù)列的長(zhǎng)度的可變的,那么各數(shù)據(jù)行的長(zhǎng)度都是可變的.
   3、如果某個(gè)數(shù)據(jù)表里的數(shù)據(jù)行的長(zhǎng)度是可變的,那么,為了節(jié)約存儲(chǔ)空間,MySQL會(huì)把這個(gè)數(shù)據(jù)表里的固定長(zhǎng)度類(lèi)型的數(shù)據(jù)列轉(zhuǎn)換為相應(yīng)的可變長(zhǎng)度類(lèi)型.
例外:長(zhǎng)度小于4個(gè)字符的char數(shù)據(jù)列不會(huì)被轉(zhuǎn)換為varchar類(lèi)型
支持多語(yǔ)言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類(lèi)型以盡量減少字符轉(zhuǎn)換問(wèn)題 


效率來(lái)說(shuō)基本是char>varchar>text,但是如果使用的是Innodb引擎的話(huà),推薦使用varchar代替char
char和varchar可以有默認(rèn)值,text不能指定默認(rèn)值

對(duì)于以上關(guān)于mysql數(shù)據(jù)類(lèi)型的字符串解析,大家是不是覺(jué)得非常有幫助。如果需要了解更多內(nèi)容,請(qǐng)繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會(huì)喜歡上這些內(nèi)容的。

本文題目:mysql數(shù)據(jù)類(lèi)型的字符串解析
網(wǎng)站地址:http://muchs.cn/article32/gpjcpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、建站公司、面包屑導(dǎo)航虛擬主機(jī)、標(biāo)簽優(yōu)化外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)