电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

MYSQL中 char 和 varchar的區(qū)別

瀏覽:31日期:2023-10-11 13:47:43

CHAR和VARCHAR類型相似,差別主要在存儲,尾隨空格和檢索方式上。

CHAR和VARCHAR相同的是:CHAR和VARCHAR都指定了字符長度,注意是字符長度。例如char(30) 和 varchar(30)表示都可以存30個字符。有一點要注意的是在utf8mb4編碼中,每個字符占4個節(jié)點。在utf8中,每個字符占3個字節(jié)。當(dāng)要存儲的字符超過CHAR/VARCHAR指定的最大長度。在sql mode 沒開啟的時候是截斷要存儲的字串,只存儲前30位

CHAR列中的值是定長的字符串。長度可以指定為0到255個字符(例如utf8mb4: 0-255*4個字節(jié))之間的值當(dāng)使用CHAR存儲字符時,以CHAR(30)為例,不夠30個字符的以空格向右填充。當(dāng)檢索CHAR值時,除非啟用sqlmode:PAD_CHAR_TO_FULL-LENGTH SQL模式,否則將刪除尾部空格。

VARCHAR列中的值是可變長度的字符串。長度可以指定為0到65535字節(jié)之間的值。VARCHAR的有效最大長度取決于最大行大小(65535字節(jié),在所有列之間共享)和使用的字符集

與CHAR不同的是,VARCHAR在存儲數(shù)據(jù)的時候,會額外存儲存儲1-2個字節(jié)(例如varchar(4),這1-2個字節(jié)長度不會算在這4個字符長度里面,不用擔(dān)心被截斷),這1-2個字節(jié)用來記錄數(shù)據(jù)字符的長度。假如數(shù)據(jù)字符長度小于等于255,則使用1個字節(jié)記錄數(shù)據(jù)長度。大于則用兩個字節(jié)。CHAR只存儲數(shù)據(jù)本身。如下圖所示。

(誤區(qū):varchar在查詢時比char慢是因為會計算varchar的字節(jié)長度(X))

在latin1編碼中,Latin1不能存中文。英文字母為1個字節(jié)。

Value CHAR(4) Storage Required VARCHAR(4) Storage Required ’’ ’ ’ 4 bytes ’’ 1 byte ’ab’ ’ab ’ 4 bytes ’ab’ 3 byte ’abcd’ ’abcd’ 4 bytes ’abcd’ 5 byte ’abcdefgh’ ’abcd’ 4 bytes ’abcd’ 5 byte

需要注意的是VARCHAR值在存儲時不填充空格。在存儲和檢索值時,尾部空格將被保留,這與標(biāo)準(zhǔn)SQL一致。而CHAR則相反,CHAR在儲存時會填充空格,在檢索時尾部空格會去掉,無論這個尾部空格是自動填充的還是數(shù)據(jù)本身的。舉個例子:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO vc VALUES (’ab ’, ’ab ’);Query OK, 1 row affected (0.00 sec) mysql> SELECT CONCAT(’(’, v, ’)’), CONCAT(’(’, c, ’)’) FROM vc;+---------------------+---------------------+| CONCAT(’(’, v, ’)’) | CONCAT(’(’, c, ’)’) |+---------------------+---------------------+| (ab ) | (ab) |+---------------------+---------------------+1 row in set (0.06 sec)<br><br><br>

做三個實驗。

mysql> show create table vc;+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table |+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+| vc | CREATE TABLE `vc` ( `v` varchar(4) DEFAULT NULL, `c` char(4) DEFAULT NULL, UNIQUE KEY `v_UNIQUE` (`v`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |+-------+------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)

1.查詢語句 where 字段=’ ab’;

mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vc where v=’ ab’;Empty set (0.00 sec) mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vc where c=’ ab’;Empty set (0.00 sec)

2.查詢語句 where 字段=’ab ’;

mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vc where v=’ab ’;+--------------------+--------------------+| concat(’(’,v, ’)’) | concat(’(’,c, ’)’) |+--------------------+--------------------+| (ab ) | (ab) |+--------------------+--------------------+1 row in set (0.00 sec) mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vc where c=’ab ’;+--------------------+--------------------+| concat(’(’,v, ’)’) | concat(’(’,c, ’)’) |+--------------------+--------------------+| (ab ) | (ab) |+--------------------+--------------------+1 row in set (0.00 sec)<br><br><br>在所有字符串的比較中,不論是varchar,text,char 都會忽略去掉尾部空格,除了like子句,like子句不會去掉尾部空格如下所示<br><br>

mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vipshop_dba.vc where c like ’ab’; (無尾部空格)+--------------------+--------------------+| concat(’(’,v, ’)’) | concat(’(’,c, ’)’) |+--------------------+--------------------+| (ab ) | (ab) || ( ab ) | (ab) |+--------------------+--------------------+2 rows in set (0.00 sec) mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vipshop_dba.vc where c like ’ab ’; (有尾部空格)Empty set (0.00 sec) CHAR在儲存時會填充空格,在檢索時尾部空格會去掉,無論這個尾部空格是自動填充的還是數(shù)據(jù)本身的。這個去掉尾部空格的動作在比較之前會發(fā)生 mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vipshop_dba.vc where v like ’ab ’; (有尾部空格)+--------------------+--------------------+| concat(’(’,v, ’)’) | concat(’(’,c, ’)’) |+--------------------+--------------------+| (ab ) | (ab) |+--------------------+--------------------+1 row in set (0.01 sec) mysql> SELECT concat(’(’,v, ’)’),concat(’(’,c, ’)’) FROM vipshop_dba.vc where v like ’ab’; (無尾部空格)Empty set (0.00 sec)

3.varchar 設(shè)置unique 索引 觀察 ’ab’ 和 ’ab ’是否同時能存在

mysql> insert into vc (v,c)values(’ab ’, ’ab ’) -> ;ERROR 1062 (23000): Duplicate entry ’ab ’ for key ’v_UNIQUE’mysql> insert into vc (v,c)values(’ ab ’, ’ab ’) -> ;Query OK, 1 row affected, 1 warning (0.00 sec)<br>說明雖然varchar 尾部空格可以保留,但是索引上似乎額外做了限制。如果varchar是唯一索引,插入的值區(qū)別只在于尾部空格的數(shù)量的話則會報 Duplicate key

說到字節(jié)限制這個問題,也想提醒一下。索引長度也是有限制的噢:

innodb引擎的每個索引列長度限制為767字節(jié)(bytes),所有組成索引列的長度和不能大于3072字節(jié)。注意是字節(jié),varchar(256)在不同的編碼字節(jié)計算不同。例如在utf8mb4中,一個字符占4個字節(jié),256個字符=1024個字節(jié)。就達(dá)不到索引覆蓋的效果噢。相當(dāng)于只做了一個前綴索引(非常重要,前綴索引是需要回(主鍵)表的,二次查詢)

innodb引擎可以通過配置innodb_large_prefix=on(全局參數(shù),動態(tài)生效)來讓單個索引列長度限制上升到3072字節(jié)

在MySQL5.7里默認(rèn) innodb_large_prefix=1 解除了767bytes長度限制,但是單列索引長度最大還是不能超過3072bytes 在MySQL5.6里默認(rèn) innodb_large_prefix=0 限制單列索引長度不能超過767bytes。需要設(shè)置innodb_large_prefix=ON、innodb_file_format=barracuda、innodb_file_per_table=ON ,且Innodb表的存儲格式為 DYNAMIC 或 COMPRESSED,則前綴索引最多可包含3072個字節(jié)

以上就是MYSQL中 char 和 varchar的區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于MYSQL char 和 varchar的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | HDPE储罐_厂家-山东九州阿丽贝防腐设备 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 广州食堂承包_广州团餐配送_广州堂食餐饮服务公司 - 旺记餐饮 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 德州网站开发定制-小程序开发制作-APP软件开发-「两山开发」 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 铣床|万能铣床|立式铣床|数控铣床|山东滕州万友机床有限公司 | 振动台-振动试验台-振动冲击台-广东剑乔试验设备有限公司 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 国际金融网_每日财经新资讯网| 标准品网_标准品信息网_【中检计量】 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 铝镁锰板厂家_进口钛锌板_铝镁锰波浪板_铝镁锰墙面板_铝镁锰屋面-杭州军晟金属建筑材料 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 温州在线网| 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 专业的新乡振动筛厂家-振动筛品质保障-环保振动筛价格—新乡市德科筛分机械有限公司 | 小型气象站_车载气象站_便携气象站-山东风途物联网 | 恒温振荡混匀器-微孔板振荡器厂家-多管涡旋混匀器厂家-合肥艾本森(www.17world.net) | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | 天津市能谱科技有限公司-专业的红外光谱仪_红外测油仪_紫外测油仪_红外制样附件_傅里叶红外光谱技术生产服务厂商 | 证券新闻,热播美式保罗1984第二部_腾讯1080p-仁爱影院 | 期货软件-专业期货分析软件下载-云智赢| 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 |