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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 字符串类型 char varchar

發布時間:2023/12/1 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 字符串类型 char varchar 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?字符類型用在存儲名字、郵箱地址、家庭住址等描述性數據

?

char指的是定長字符,varchar指的是變長字符

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

?

?

?

?

創建兩張表

只有整型類型的寬度是顯示寬度,其他類型的寬度都是存儲寬度

?寬度指的是字符的個數

mysql> create table t13(name char(5)); Query OK, 0 rows affected (0.02 sec)mysql> create table t14(name varchar(5)); Query OK, 0 rows affected (0.01 sec)

?

char就是定長,不夠5個字符,會補全到5個字符,補全相應的空格,由空格作為占位符,湊夠5個空格。

varchar就是變長,傳幾個字符,就存幾個。

插入數據

mysql> insert into t13 values('李剛 '); #'李剛 ' Query OK, 1 row affected (0.00 sec)mysql> insert into t14 values('李剛 '); #'李剛 ' Query OK, 1 row affected (0.00 sec)

?

查詢表,看不到效果

mysql> select name from t13; # +--------+ | name | +--------+ | 李剛 | +--------+ 1 row in set (0.00 sec)mysql> select name from t14; # +---------+ | name | +---------+ | 李剛 | +---------+ 1 row in set (0.00 sec

?

?mysql函數

length:查看字節數 char_length:查看字符數

?

?

char類型 存的是5個 查的是2個

mysql 在存char類型時候 ,會自動補全空格存進來, 取的時候把默認的空格去掉

mysql> select char_length(name) from t13; # +-------------------+ | char_length(name) | +-------------------+ | 2 | +-------------------+ 1 row in set (0.00 sec)

?

?

varchar 存的是5個 查的是3個

mysql> select char_length(name) from t14; # +-------------------+ | char_length(name) | +-------------------+ | 3 | +-------------------+ 1 row in set (0.00 sec)

?

char填充空格來滿足固定長度,但是在查詢時卻會很不要臉地刪除尾部的空格(裝作自己好像沒有浪費過空間一樣),然后修改sql_mode讓其現出原形

?

#略施小計,讓char現出原形,設置sql模式,
mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';

?

出現原形

mysql> select char_length(name) from t13; +-------------------+ | char_length(name) | +-------------------+ | 5 | +-------------------+ 1 row in set (0.00 sec)

?

對于char 和varchar來說 不管怎么存 取得時候mysql只會對值進行比較 不會管末尾的空格,末尾空格沒有意義

只是末尾空格
驗證
mysql> select name from t13 where name='李剛 '; +-----------+ | name | +-----------+ | 李剛 | +-----------+ 1 row in set (0.00 sec)mysql> select name from t13 where name='李剛'; +-----------+ | name | +-----------+ | 李剛 | +-----------+

?

開頭 、中間有空格 都查詢不到 mysql> select name from t13 where name=' 李剛'; Empty set (0.00 sec)mysql> select name from t13 where name='李 剛'; Empty set (0.00 sec)

?

用模糊查詢?like,用like mysql就不會把末尾空格去掉。

精確的輸入?

mysql> select name from t13 where name like '李剛 '; Empty set (0.00 sec) mysql> select name from t13 where name like '李剛 '; Empty set (0.00 sec) # 后面補全三個空格可以查詢出來 mysql> select name from t13 where name like '李剛 '; +-----------+ | name | +-----------+ | 李杰 | +-----------+ 1 row in set (0.00 sec)

?

#常用字符串系列:char與varchar
注:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。
因此,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

大部分場景用char類型

建議
一張表里 不要char varchar混著用 ,要么全用char類型,要么全用varchar類型

?


?

轉載于:https://www.cnblogs.com/mingerlcm/p/9799813.html

總結

以上是生活随笔為你收集整理的mysql 字符串类型 char varchar的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。