深入理解MySQL?varchar(50)
一、理解MySQL varchar(50)
1.1、概述
日常開發(fā)中,數(shù)據(jù)庫建表是必不可少的一個環(huán)節(jié),建表的時候通常會看到設(shè)定某個字段的長度為varchar(50),例如如下建表語句:
那么怎么理解varchar(50)?這個分情況的,MySQL的版本不同,存儲的字符長度也不同,具體來講如下:
(1)4.0版本以下,varchar(50),指的是50字節(jié),如果存放UTF8漢字時,只能存16個(每個漢字3字節(jié));
(2)5.0版本以上,varchar(50),指的是50字符,無論存放的是數(shù)字、字母還是UTF8漢字(每個漢字3字節(jié)),都可以存放50個;
其實(shí)最好的辦法是在自己數(shù)據(jù)庫中建個表試試可以放多少漢字,現(xiàn)在公司開發(fā)中MySQL的版本至少都為5.xx版本及以上版本了,所以說varchar(50)是可以存50個漢字的;
1.2、驗(yàn)證
1.2.1、當(dāng)前MySQL的版本
1.2.2、數(shù)據(jù)庫驗(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)識 0:未刪除、1:已刪除', `create_time` datetime NOT NULL COMMENT '創(chuàng)建時間', `update_time` datetime NULL DEFAULT NULL COMMENT '修改時間', `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占用幾個字符
select `name`,char_length(`name`) from account;
1.3、題外話
MySQL中的length VS char_length:
length():mysql里面的length()函數(shù)是一個用來獲取字符串長度的內(nèi)置函數(shù);
char_length():在mysql內(nèi)置函數(shù)里面查看字符串長度的還有一個函數(shù)是char_length();
區(qū)別:
length(): 單位是字節(jié),utf8編碼下,一個漢字三個字節(jié),一個數(shù)字或字母一個字節(jié)。gbk編碼下,一個漢字兩個字節(jié),一個數(shù)字或字母一個字節(jié);
char_length():單位為字符,不管漢字還是數(shù)字或者是字母都算是一個字符;
MySQL 中 varchar 與 char 的區(qū)別?varchar(30) 中的 30 代表的涵義?
在MySQL中,varchar和char都是用于存儲可變長度字符串的數(shù)據(jù)類型,但它們之間存在一些關(guān)鍵的區(qū)別。
- 存儲空間:varchar存儲的是實(shí)際存儲在其中的字符數(shù),而char存儲的是指定的固定長度的字符數(shù)。這意味著如果一個字符串的實(shí)際長度小于varchar類型指定的長度,那么存儲空間會得到更有效的利用。相反,如果一個字符串的實(shí)際長度超過char類型指定的長度,那么多余的字符會被忽略。
- 性能:由于varchar根據(jù)實(shí)際存儲的數(shù)據(jù)量分配空間,所以它通常比char更快,特別是在處理大量數(shù)據(jù)時。
- 可變長度:varchar允許字符串的長度改變,這意味著它可以存儲不同長度的字符串。另一方面,char在創(chuàng)建時就已經(jīng)確定了長度,所以它不能動態(tài)地改變大小。
現(xiàn)在來看一下varchar(30)中的數(shù)字30:
varchar(30)表示一個可以存儲最多30個字符的可變長度字符串。這里的數(shù)字30是一個最大值,實(shí)際存儲的字符數(shù)可能會少于這個數(shù)字,具體取決于實(shí)際存儲的字符串長度。
總的來說,選擇使用varchar還是char主要取決于你的具體需求。如果你知道你的數(shù)據(jù)可能會包含不同長度的字符串,那么使用varchar可能是一個更好的選擇。如果你知道你的字符串將始終具有相同的長度,那么使用char可能更為合適。
到此這篇關(guān)于深入理解MySQL varchar(50)的文章就介紹到這了,更多相關(guān)MySQL varchar(50)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決
這篇文章主要介紹了mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08[MySQL binlog]mysql如何徹底解析Mixed日志格式的binlog
這篇文章主要介紹了mysql徹底解析Mixed日志格式的binlog,需要的朋友可以參考下2014-02-02