<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 09:54:45
        文檔

        mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別

        mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別:mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別 有需要的朋友可 說(shuō)明: 1、char: 固定長(zhǎng)度的非 Unicode 字符數(shù)據(jù),最大長(zhǎng)度為 8,000 個(gè)字符。 2、varchar: 可變長(zhǎng)度的非 Unicode 數(shù)據(jù),最長(zhǎng)為 8,000 個(gè)字符。 3、nvarchar:
        推薦度:
        導(dǎo)讀mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別:mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別 有需要的朋友可 說(shuō)明: 1、char: 固定長(zhǎng)度的非 Unicode 字符數(shù)據(jù),最大長(zhǎng)度為 8,000 個(gè)字符。 2、varchar: 可變長(zhǎng)度的非 Unicode 數(shù)據(jù),最長(zhǎng)為 8,000 個(gè)字符。 3、nvarchar:

        mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別 有需要的朋友可

        說(shuō)明:
        1、char:
        固定長(zhǎng)度的非 Unicode 字符數(shù)據(jù),最大長(zhǎng)度為 8,000 個(gè)字符。
        2、varchar:
        可變長(zhǎng)度的非 Unicode 數(shù)據(jù),最長(zhǎng)為 8,000 個(gè)字符。
        3、nvarchar:
        可變長(zhǎng)度 Unicode 數(shù)據(jù),其最大長(zhǎng)度為 4,000 字符。
        4、nchar
        固定長(zhǎng)度的 Unicode 數(shù)據(jù),最大長(zhǎng)度為 4,000 個(gè)字符。
        5、char和varchar都是字符串類型的
        用Unicode編碼的字符串,結(jié)果是字符的整數(shù)值


        如有以下數(shù)據(jù)結(jié)構(gòu):

        工號(hào) 姓名 部門(mén)
        ———————–
        1 張三 財(cái)務(wù)
        2 李四 人事
        3 王五 銷售
        ……..

        我們定義”姓名”為char(10)(靜態(tài))的時(shí)簡(jiǎn)單地用php代碼表示:
        簡(jiǎn)單地模擬底層數(shù)據(jù)存儲(chǔ)鏈表$data

        代碼如下
        $col_num_len =1; //工號(hào)長(zhǎng)度為1
        $col_name_len=10; //姓名長(zhǎng)度為10
        $col_unit_len =4; //部門(mén)長(zhǎng)度為4
        $col_len=$col_num_len+$col_name_len+$col_unit_len+3;

        //表示每筆記錄的總長(zhǎng)度,包括3個(gè)分隔符
        實(shí)現(xiàn)如下:

        代碼如下

        $data="1|張三 |財(cái)務(wù)|2|李四 |人事|3|王五 |銷售|..."; //簡(jiǎn)單地模擬底層數(shù)據(jù)存儲(chǔ)鏈表

        //假設(shè)查找第2條記錄的"姓名"字段數(shù)據(jù)
        $record_start=$col_len*1+1; //獲取第2行的起始位置
        $record =substr($data,$record_start,$col_len); //獲取第2條記錄
        $col_name_start=$col_num_len+2; //獲取"姓名"字段的起始位置
        $col_name=substr($record,$col_name_start,$col_name_len); //獲取"姓名"字段的數(shù)據(jù)
        echo $col_name;

        -----------

        代碼如下
        //假設(shè)更新第2條記錄的"姓名"字段數(shù)據(jù)為"李小四"
        $update_info="李小四";
        $data=substr_replace($data,$update_info,$col_name_start,$col_name_len); //更新字段,流程結(jié)束
        而如果我們定義”姓名”字段為varchar(10)(動(dòng)態(tài))的時(shí)候情況則要復(fù)雜:
        注意存儲(chǔ)”姓名”的字段沒(méi)有空格,這是char和varchar的存儲(chǔ)區(qū)別
        $col_num_len =1; //工號(hào)長(zhǎng)度為1
        $col_name_len=10; //姓名長(zhǎng)度為10
        $col_unit_len =4; //部門(mén)長(zhǎng)度為4
        $col_len=$col_num_len+$col_name_len+$col_unit_len+3;

        實(shí)現(xiàn)如下:

        代碼如下

        //動(dòng)態(tài)存放數(shù)據(jù)行的起始位置,數(shù)據(jù)為更新時(shí)生成(重新)
        $record_1_start=1;$record_1_name_dynamic_len=4; //$col_1_name_dynamic_len記錄"姓名"動(dòng)態(tài)字段的長(zhǎng)度
        $record_2_start=13;$record_2_name_dynamic_len=4;
        $record_3_start=26;$record_3_name_dynamic_len=6;
        ...

        $data="1|張三|財(cái)務(wù)|2|李四|人事|3|王小明|銷售|..."; //簡(jiǎn)單地模擬底層數(shù)據(jù)存儲(chǔ)鏈表,注意存儲(chǔ)"姓名"的字段沒(méi)有空格

        //假設(shè)查找第2條記錄的"姓名"字段數(shù)據(jù)
        $record_2_end=$record_3_start-1; //獲取第2行的結(jié)束位置
        $record =substr($data,$record_2_start,$record_2_end); //獲取第2條記錄
        $col_name_start=$col_num_len+2; //獲取"姓名"字段的起始位置
        $col_name=substr($record,$col_name_start,$record_2_name_dynamic_len); //獲取"姓名"字段的數(shù)據(jù)
        echo $col_name;

        //假設(shè)更新第2條記錄的"姓名"字段數(shù)據(jù)為"李小四",這邊比靜態(tài)的復(fù)雜很多
        $update_info="李小四";
        $update_len=strlen($update_info); //獲取更新內(nèi)容的長(zhǎng)度
        if($diff_len=$update_len-$record_2_name_dynamic_len)
        {
        $data=substr_replace($data,"",$col_name_start,$record_2_name_dynamic_len); //清除原先數(shù)據(jù)
        $record_2_name_dynamic_len=$update_len; //更新字段的長(zhǎng)度(并存儲(chǔ)新值)

        //在此假設(shè)總記錄數(shù)為n
        for($i=2;$i<=n;$i++)
        {
        ${'record_'.$i.'_start'}=${'record_'.$i.'_start'}+$diff_len; //重新更新每個(gè)行的起始位置(并存儲(chǔ)新值),系統(tǒng)開(kāi)銷大(實(shí)際上有不同的方法解決)
        }
        }

        $data=substr_replace($data,$update_info,$col_name_start,0);


        文中直接使用”substr_replace”,而在數(shù)據(jù)量很大的時(shí)候,底層實(shí)現(xiàn)上的開(kāi)銷也是不小的,在mysql中表現(xiàn)為(Row Migration)現(xiàn)象,在此不作贅述

        根據(jù)以上的粗略實(shí)現(xiàn)證明:
        1、varchar類型在更新環(huán)節(jié)上的系統(tǒng)開(kāi)銷是遠(yuǎn)大于char類型的。
        2、兩者間查找搜索性能上是不相上下的。
        3、兩者間的存儲(chǔ)數(shù)據(jù)量($data)環(huán)節(jié)上,char要顯示大于varchar。
        4、大數(shù)據(jù)量提取時(shí)varchar的磁盤(pán)IO消耗更低,意味著varchar綜合查詢性能會(huì)更好。
        5、沒(méi)有了。

        實(shí)際應(yīng)用中的結(jié)論(如在mysql中):
        1、char適合字段頻繁更新時(shí)的應(yīng)用。
        2、varchar更節(jié)省磁盤(pán)空間。
        3、實(shí)際應(yīng)用中大數(shù)據(jù)量(多行)查詢返回,varchar的查詢性能比起char來(lái)要好出不少。
        4、選擇char和varchar會(huì)改變整體數(shù)據(jù)結(jié)構(gòu)的算法以及存儲(chǔ)方式。在mysql應(yīng)用中,如已存在varchar字段,那么其它所有的char字段將以varchar方式存儲(chǔ)。
        5、沒(méi)有了。

        (以上算法僅以PHP簡(jiǎn)單描述,歡迎更好的思路加以指教)

        注:此文原作者的寫(xiě)作時(shí)間比較久遠(yuǎn)了,所以有些地方和現(xiàn)在的有些出入,體現(xiàn)在:

        1.在innodb引擎中,char和varchar的實(shí)現(xiàn)已無(wú)異,效率上并沒(méi)多大區(qū)別。
        2.選擇char和varchar并不會(huì)改變整體數(shù)據(jù)結(jié)構(gòu)的算法以及存儲(chǔ)方式。(我記得這是在MYSQL4里的特性,網(wǎng)上的老文章有講述,到了MYSQL5實(shí)測(cè)已無(wú)此特性)


        總結(jié)分析:
        文字字段若長(zhǎng)度固定,如:身分證號(hào)碼,就不要用 varchar 或 nvarchar,應(yīng)該用 char 或 nchar。
        支持多語(yǔ)言的站點(diǎn)應(yīng)考慮使用 Unicode nchar 或 nvarchar 數(shù)據(jù)類型以盡量減少字符轉(zhuǎn)換問(wèn)題
        文字字段若長(zhǎng)度不固定,如:地址,則該用 varchar 或 nvarchar。除了可節(jié)省存儲(chǔ)空間外,存取硬盤(pán)時(shí)也會(huì)較有效率

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別

        mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別:mysql中char、varchar、nvarchar數(shù)據(jù)類型的用法區(qū)別 有需要的朋友可 說(shuō)明: 1、char: 固定長(zhǎng)度的非 Unicode 字符數(shù)據(jù),最大長(zhǎng)度為 8,000 個(gè)字符。 2、varchar: 可變長(zhǎng)度的非 Unicode 數(shù)據(jù),最長(zhǎng)為 8,000 個(gè)字符。 3、nvarchar:
        推薦度:
        • 熱門(mén)焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專題
        Top
        主站蜘蛛池模板: 成人免费午间影院在线观看| 亚洲日本VA中文字幕久久道具| 亚洲欧美国产日韩av野草社区| 国产无遮挡又黄又爽免费视频| 日韩亚洲不卡在线视频中文字幕在线观看 | 亚洲精品午夜视频| 97国产免费全部免费观看| 2022年亚洲午夜一区二区福利| 久久精品免费视频观看| 亚洲小说区图片区另类春色| 9久热精品免费观看视频| 国产亚洲精品精华液| 中文字幕无码一区二区免费| 亚洲国产精品特色大片观看完整版 | 亚洲人成影院在线| 亚洲视频免费在线看| 亚洲成人黄色在线| 久久久www成人免费毛片| 亚洲精品无码高潮喷水A片软| 一本色道久久综合亚洲精品| 97在线视频免费播放| 456亚洲人成在线播放网站| 免费人成视频在线| 波多野结衣免费一区视频 | 久久久影院亚洲精品| 1000部拍拍拍18免费网站| 亚洲欧美日本韩国| 78成人精品电影在线播放日韩精品电影一区亚洲 | 男女一进一出抽搐免费视频 | 亚洲人成影院77777| 在线免费观看一级片| 日亚毛片免费乱码不卡一区| 亚洲五月综合缴情在线观看| 大学生a级毛片免费观看| 99在线视频免费| 美女黄频a美女大全免费皮| 国产成人亚洲精品青草天美| 国产免费啪嗒啪嗒视频看看| 国产精品免费一区二区三区四区 | 久久不见久久见免费影院| 一级特黄aa毛片免费观看|