MySql官方文檔學習數據類型之Char和VarChar

char和varchar類型是類似的,可是他們在存儲和檢索上也存在不一樣,而且它們在最大長度和結尾是否保留空格上也有不一樣。mysql

char的長度在你建立表格的時候由你本身定義的.長度的範圍是0-255。當char值被存儲的時候,它使用空格填充到規定的長度。當檢查char值時,結尾空格將刪除尾部空格,除非PAD_CHAR_TO_FULL_LENGTH這個SQL_MODE被啓用。sql

varchar列中的值是可變的字符串,長度規定在0到65535範圍內。VACHAR的有效最大長度受限於最大行大小和使用的字符集編碼

與char產生鮮明對比的是,varchar的值被用1-2兩個字節存儲前綴數據。前綴的長度代表字節數,若是不超過255字節,一列使用一個長度的字節來表示。若是超過255字節,則使用兩個長度的字節。code

若是沒啓動嚴格的SQL模式,對CHAR或者VARCHAR進行賦值階段,若是列超過了列的最大長度,值會裁剪而後生成一個警告。若是使用嚴格的SQL模式,會產生一個錯誤。排序

無論使用那種SQL模式,VARCHAR在插入前都會截斷超出列長度的結尾空格,並生成警告。字符串

char & varchar設置的最長度僅爲8,可是下面的語句是能夠執行成功的

update `SimpleBookStore`.`Book_0` set `text`='123123            ' where `id`='2'

和標準的SQL保持一致,VARCHAR的值當他們被存儲的時候值不會被填充,被存儲的時候尾部空格會被存儲和檢索。it

下表經過顯示將各類字符串值存儲到CHAR(4)和VARCHAR(4)列中的結果來講明CHAR和VARCHAR之間的區別(假設該列使用單字節字符集,如latin1)。date

顯示在表的最後一行中的值僅在不使用嚴格的SQL模式時才適用。 若是啓用了嚴格模式,則不會存儲超過列長度的值,而且會致使錯誤。im

64783756377f44ffc9c45d7a73257544.png

InnoDB將長度大於或等於768字節的固定長度字段編碼爲可變長度字段,能夠將其存儲在頁面外。 例如,若是字符集的最大字節長度大於3(如utf8mb4同樣),則CHAR(255)列能夠超過768個字節。數據

若是給定值存儲在CHAR(4)和VARCHAR(4)列中,則從這些列檢索的值並不老是相同的,由於檢索時會從CHAR列中刪除尾隨空格。 如下示例說明了這種差別:

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)

CHAR,VARCHAR和TEXT列中的值根據分配給該列的字符集排序規則進行排序和比較。

相關文章
相關標籤/搜索