深入理解MySQL?varchar(50)
一、理解MySQL varchar(50)
1.1、概述
日常開(kāi)發(fā)中,數(shù)據(jù)庫(kù)建表是必不可少的一個(gè)環(huán)節(jié),建表的時(shí)候通常會(huì)看到設(shè)定某個(gè)字段的長(zhǎng)度為varchar(50),例如如下建表語(yǔ)句:

那么怎么理解varchar(50)?這個(gè)分情況的,MySQL的版本不同,存儲(chǔ)的字符長(zhǎng)度也不同,具體來(lái)講如下:
(1)4.0版本以下,varchar(50),指的是50字節(jié),如果存放UTF8漢字時(shí),只能存16個(gè)(每個(gè)漢字3字節(jié));
(2)5.0版本以上,varchar(50),指的是50字符,無(wú)論存放的是數(shù)字、字母還是UTF8漢字(每個(gè)漢字3字節(jié)),都可以存放50個(gè);
其實(shí)最好的辦法是在自己數(shù)據(jù)庫(kù)中建個(gè)表試試可以放多少漢字,現(xiàn)在公司開(kāi)發(fā)中MySQL的版本至少都為5.xx版本及以上版本了,所以說(shuō)varchar(50)是可以存50個(gè)漢字的;
1.2、驗(yàn)證
1.2.1、當(dāng)前MySQL的版本

1.2.2、數(shù)據(jù)庫(kù)驗(yàn)證
(一)初始化表
DROP TABLE IF EXISTS `account`;
CREATE TABLE `account` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`is_deleted` int NOT NULL DEFAULT 0 COMMENT '刪除標(biāo)識(shí) 0:未刪除、1:已刪除',
`create_time` datetime NOT NULL COMMENT '創(chuàng)建時(shí)間',
`update_time` datetime NULL DEFAULT NULL COMMENT '修改時(shí)間',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
`money` decimal(10,0) NULL DEFAULT NULL COMMENT '賬戶余額',
`email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '賬戶表' ROW_FORMAT = DYNAMIC;
insert into `account` values
(null,0,now(),now(),'張三','1000000','zhangsan@qq.com'),
(null,0,now(),now(),'尼古拉斯趙四','3000000','zhaosi@qq.com');(二)查詢name占用幾個(gè)字符
select `name`,char_length(`name`) from account;

1.3、題外話
MySQL中的length VS char_length:
length():mysql里面的length()函數(shù)是一個(gè)用來(lái)獲取字符串長(zhǎng)度的內(nèi)置函數(shù);
char_length():在mysql內(nèi)置函數(shù)里面查看字符串長(zhǎng)度的還有一個(gè)函數(shù)是char_length();
區(qū)別:
length(): 單位是字節(jié),utf8編碼下,一個(gè)漢字三個(gè)字節(jié),一個(gè)數(shù)字或字母一個(gè)字節(jié)。gbk編碼下,一個(gè)漢字兩個(gè)字節(jié),一個(gè)數(shù)字或字母一個(gè)字節(jié);
char_length():?jiǎn)挝粸樽址?,不管漢字還是數(shù)字或者是字母都算是一個(gè)字符;

MySQL 中 varchar 與 char 的區(qū)別?varchar(30) 中的 30 代表的涵義?
在MySQL中,varchar和char都是用于存儲(chǔ)可變長(zhǎng)度字符串的數(shù)據(jù)類型,但它們之間存在一些關(guān)鍵的區(qū)別。
- 存儲(chǔ)空間:varchar存儲(chǔ)的是實(shí)際存儲(chǔ)在其中的字符數(shù),而char存儲(chǔ)的是指定的固定長(zhǎng)度的字符數(shù)。這意味著如果一個(gè)字符串的實(shí)際長(zhǎng)度小于varchar類型指定的長(zhǎng)度,那么存儲(chǔ)空間會(huì)得到更有效的利用。相反,如果一個(gè)字符串的實(shí)際長(zhǎng)度超過(guò)char類型指定的長(zhǎng)度,那么多余的字符會(huì)被忽略。
- 性能:由于varchar根據(jù)實(shí)際存儲(chǔ)的數(shù)據(jù)量分配空間,所以它通常比char更快,特別是在處理大量數(shù)據(jù)時(shí)。
- 可變長(zhǎng)度:varchar允許字符串的長(zhǎng)度改變,這意味著它可以存儲(chǔ)不同長(zhǎng)度的字符串。另一方面,char在創(chuàng)建時(shí)就已經(jīng)確定了長(zhǎng)度,所以它不能動(dòng)態(tài)地改變大小。
現(xiàn)在來(lái)看一下varchar(30)中的數(shù)字30:
varchar(30)表示一個(gè)可以存儲(chǔ)最多30個(gè)字符的可變長(zhǎng)度字符串。這里的數(shù)字30是一個(gè)最大值,實(shí)際存儲(chǔ)的字符數(shù)可能會(huì)少于這個(gè)數(shù)字,具體取決于實(shí)際存儲(chǔ)的字符串長(zhǎng)度。
總的來(lái)說(shuō),選擇使用varchar還是char主要取決于你的具體需求。如果你知道你的數(shù)據(jù)可能會(huì)包含不同長(zhǎng)度的字符串,那么使用varchar可能是一個(gè)更好的選擇。如果你知道你的字符串將始終具有相同的長(zhǎng)度,那么使用char可能更為合適。
到此這篇關(guān)于深入理解MySQL varchar(50)的文章就介紹到這了,更多相關(guān)MySQL varchar(50)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
免安轉(zhuǎn)MySQL服務(wù)的啟動(dòng)與停止方法
免安轉(zhuǎn)MySQL服務(wù)的啟動(dòng)與停止方法,可以不用安裝解壓以后即可執(zhí)行,對(duì)于老手推薦,新手建議用安裝版本。2011-03-03
MySQL數(shù)據(jù)庫(kù):?高并發(fā)電商場(chǎng)景下的架構(gòu)設(shè)計(jì)與優(yōu)化
企業(yè)使用典型主從復(fù)制模式的數(shù)據(jù)庫(kù)架構(gòu),但在面對(duì)極端高并發(fā)場(chǎng)景時(shí),該架構(gòu)存在高可用性和網(wǎng)絡(luò)帶寬壓力等問(wèn)題,文章隨后詳細(xì)分析了這些問(wèn)題的原因,并提出了解決方案,包括使用分布式鎖、消息隊(duì)列削峰、備份策略重構(gòu)和高可用組件升級(jí)等,以提升系統(tǒng)的穩(wěn)定性與容災(zāi)能力2025-10-10
MySQL如何更改數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)目錄詳解
這篇文章主要給大家介紹了關(guān)于MySQL如何更改數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)目錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
mysql字符集和校對(duì)規(guī)則(Mysql校對(duì)集)
字符集的概念大家都清楚,校對(duì)規(guī)則很多人不了解,一般數(shù)據(jù)庫(kù)開(kāi)發(fā)中也用不到這個(gè)概念,mysql在這方便貌似很先進(jìn),大概介紹一下2012-07-07
Mysql 用戶權(quán)限管理實(shí)現(xiàn)
MySQL 是一個(gè)多用戶數(shù)據(jù)庫(kù),具有功能強(qiáng)大的訪問(wèn)控制系統(tǒng),可以為不同用戶指定不同權(quán)限。本文就來(lái)介紹一下Mysql 用戶權(quán)限管理實(shí)現(xiàn),感興趣的可以了解一下2021-05-05
MySQL需要根據(jù)特定順序排序的實(shí)現(xiàn)方法
在MySQL中,我們可以通過(guò)指定順序排序來(lái)在查詢結(jié)果中控制數(shù)據(jù)的排列順序,這種排序方式是非常有用的,本文就來(lái)介紹一下,感興趣的可以了解一下2023-11-11
MySQL設(shè)置密碼復(fù)雜度策略的完整步驟(附代碼示例)
MySQL密碼策略還可能包括密碼復(fù)雜度的檢查,如是否要求密碼包含大寫字母、小寫字母、數(shù)字和特殊字符等,這篇文章主要介紹了MySQL設(shè)置密碼復(fù)雜度策略的完整步驟,需要的朋友可以參考下2025-08-08

