日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql字符类型

發(fā)布時(shí)間:2025/3/21 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql字符类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

字符類型

#官網(wǎng):https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括號(hào)內(nèi)的參數(shù)指的都是字符的長(zhǎng)度#char類型:定長(zhǎng),簡(jiǎn)單粗暴,浪費(fèi)空間,存取速度快字符長(zhǎng)度范圍:0-255(一個(gè)中文是一個(gè)字符,是utf8編碼的3個(gè)字節(jié))存儲(chǔ):存儲(chǔ)char類型的值時(shí),會(huì)往右填充空格來滿足長(zhǎng)度例如:指定長(zhǎng)度為10,存>10個(gè)字符則報(bào)錯(cuò),存<10個(gè)字符則用空格填充直到湊夠10個(gè)字符存儲(chǔ)檢索:在檢索或者說查詢時(shí),查出的結(jié)果會(huì)自動(dòng)刪除尾部的空格,除非我們打開pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)#varchar類型:變長(zhǎng),精準(zhǔn),節(jié)省空間,存取速度慢字符長(zhǎng)度范圍:0-65535(如果大于21845會(huì)提示用其他類型 。mysql行最大限制為65535字節(jié),字符編碼為utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)存儲(chǔ):varchar類型存儲(chǔ)數(shù)據(jù)的真實(shí)內(nèi)容,不會(huì)用空格填充,如果'ab ',尾部的空格也會(huì)被存起來強(qiáng)調(diào):varchar類型會(huì)在真實(shí)數(shù)據(jù)前加1-2Bytes的前綴,該前綴用來表示真實(shí)數(shù)據(jù)的bytes字節(jié)數(shù)(1-2Bytes最大表示65535個(gè)數(shù)字,正好符合mysql對(duì)row的最大字節(jié)限制,即已經(jīng)足夠使用)如果真實(shí)的數(shù)據(jù)<255bytes則需要1Bytes的前綴(1Bytes=8bit 2**8最大表示的數(shù)字為255)如果真實(shí)的數(shù)據(jù)>255bytes則需要2Bytes的前綴(2Bytes=16bit 2**16最大表示的數(shù)字為65535)檢索:尾部有空格會(huì)保存下來,在檢索或者說查詢時(shí),也會(huì)正常顯示包含空格在內(nèi)的內(nèi)容

官網(wǎng)解釋如下測(cè)試前了解兩個(gè)函數(shù)

length:查看字節(jié)數(shù) char_length:查看字符數(shù)

1. char填充空格來滿足固定長(zhǎng)度,但是在查詢時(shí)卻會(huì)很不要臉地刪除尾部的空格(裝作自己好像沒有浪費(fèi)過空間一樣),然后修改sql_mode讓其現(xiàn)出原形

mysql> create table t1(x char(5),y varchar(5)); Query OK, 0 rows affected (0.26 sec)#char存5個(gè)字符,而varchar存4個(gè)字符 mysql> insert into t1 values('你瞅啥 ','你瞅啥 '); Query OK, 1 row affected (0.05 sec)mysql> SET sql_mode=''; Query OK, 0 rows affected, 1 warning (0.00 sec)#在檢索時(shí)char很不要臉地將自己浪費(fèi)的2個(gè)字符給刪掉了,裝的好像自己沒浪費(fèi)過空間一樣,而varchar很老實(shí),存了多少,就顯示多少 mysql> select x,char_length(x),y,char_length(y) from t1; +-----------+----------------+------------+----------------+ | x | char_length(x) | y | char_length(y) | +-----------+----------------+------------+----------------+ | 你瞅啥 | 3 | 你瞅啥 | 4 | +-----------+----------------+------------+----------------+ row in set (0.00 sec)#略施小計(jì),讓char現(xiàn)出原形 mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH'; Query OK, 0 rows affected (0.00 sec)#這下子char原形畢露了...... mysql> select x,char_length(x),y,char_length(y) from t1; +-------------+----------------+------------+----------------+ | x | char_length(x) | y | char_length(y) | +-------------+----------------+------------+----------------+ | 你瞅啥 | 5 | 你瞅啥 | 4 | +-------------+----------------+------------+----------------+ row in set (0.00 sec)#char類型:3個(gè)中文字符+2個(gè)空格=11Bytes #varchar類型:3個(gè)中文字符+1個(gè)空格=10Bytes mysql> select x,length(x),y,length(y) from t1; +-------------+-----------+------------+-----------+ | x | length(x) | y | length(y) | +-------------+-----------+------------+-----------+ | 你瞅啥 | 11 | 你瞅啥 | 10 | +-------------+-----------+------------+-----------+ row in set (0.00 sec)

2. 雖然 CHAR 和 VARCHAR 的存儲(chǔ)方式不太相同,但是對(duì)于兩個(gè)字符串的比較,都只比 較其值,忽略 CHAR 值存在的右填充,即使將 SQL _MODE 設(shè)置為 PAD_CHAR_TO_FULL_ LENGTH 也一樣,,但這不適用于like

Values in CHAR and VARCHAR columns are sorted and compared according to the character set collation assigned to the column.All MySQL collations are of type PAD SPACE. This means that all CHAR, VARCHAR, and TEXT values are compared without regard to any trailing spaces. “Comparison” in this context does not include the LIKE pattern-matching operator, for which trailing spaces are significant. For example:mysql> CREATE TABLE names (myname CHAR(10)); Query OK, 0 rows affected (0.03 sec)mysql> INSERT INTO names VALUES ('Monty'); Query OK, 1 row affected (0.00 sec)mysql> SELECT myname = 'Monty', myname = 'Monty ' FROM names; +------------------+--------------------+ | myname = 'Monty' | myname = 'Monty ' | +------------------+--------------------+ | 1 | 1 | +------------------+--------------------+ row in set (0.00 sec)mysql> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names; +---------------------+-----------------------+ | myname LIKE 'Monty' | myname LIKE 'Monty ' | +---------------------+-----------------------+ | 1 | 0 | +---------------------+-----------------------+ row in set (0.00 sec)

3. 總結(jié)

#常用字符串系列:char與varchar 注:雖然varchar使用起來較為靈活,但是從整個(gè)系統(tǒng)的性能角度來說,char數(shù)據(jù)類型的處理速度更快,有時(shí)甚至可以超出varchar處理速度的50%。因此,用戶在設(shè)計(jì)數(shù)據(jù)庫時(shí)應(yīng)當(dāng)綜合考慮各方面的因素,以求達(dá)到最佳的平衡#其他字符串系列(效率:char>varchar>text) TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB BINARY系列 BINARY VARBINARYtext:text數(shù)據(jù)類型用于保存變長(zhǎng)的大字符串,可以組多到65535 (2**16 ? 1)個(gè)字符。 mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 ? 1) characters. longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 ? 1) characters.

轉(zhuǎn)載于:https://www.cnblogs.com/fmgao-technology/p/9208653.html

總結(jié)

以上是生活随笔為你收集整理的mysql字符类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。