CHAR與VARCHAR詳解

前言:

前面寫過一篇介紹int類型的文章,一直想寫一篇介紹字符串字段類型的文章,一直拖著也沒思路要怎麼下手。最近多關註瞭下這方面的文章,決定還是把拖瞭好久的文章瞭結瞭吧。本篇文章主要會介紹字符串類型char及varchar的用法及區別。

▍1.CHAR類型介紹

我們平時使用char類型定義字段時,往往會指定其長度M,即char(M)。其實M指的是字符數,即這個字段最多存儲多少個字符,M可不指定,默認為1,范圍是[0,255],單個字母、數字、中文等都是占用一個字符。utf8字符集下一個中文字符占用3個字節。下面我們簡單測試下:

# 假設以如下建表語句創建測試表
CREATE TABLE `char_tb1` (
`col1` char DEFAULT NULL,
`col2` char(5) DEFAULT NULL,
`col3` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 進入數據庫查詢建表語句如下 發現char(M) M可不指定,默認為1
mysql> show create table char_tb1G
*************************** 1. row ***************************
Table: char_tb1
Create Table: CREATE TABLE `char_tb1` (
`col1` char(1) DEFAULT NULL,
`col2` char(5) DEFAULT NULL,
`col3` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

# 插入數據 可以看出M表示保存的最大字符數,字母、數字、中文等都是占用一個字符
mysql> insert into char_tb1 (col1) values ('a'),('1'),('王'),(']');
Query OK, 4 rows affected (0.01 sec)
mysql> insert into char_tb1 (col1) values ('aa'),('12');
ERROR 1406 (22001): Data too long for column 'col1' at row 1
mysql> select * from char_tb1;
+------+------+------+
| col1 | col2 | col3 |
+------+------+------+
| a | NULL | NULL |
| 1 | NULL | NULL |
| 王 | NULL | NULL |
| ] | NULL | NULL |
+------+------+------+
4 rows in set (0.00 sec)
mysql> insert into char_tb1 (col2) values ('abcd'),('王-123'),('^*123'),('12'),('一二三四五');
Query OK, 5 rows affected (0.01 sec)
mysql> insert into char_tb1 (col2) values ('abcdef');
ERROR 1406 (22001): Data too long for column 'col2' at row 1
mysql> select * from char_tb1;
+------+-----------------+------+
| col1 | col2 | col3 |
+------+-----------------+------+
| a | NULL | NULL |
| 1 | NULL | NULL |
| 王 | NULL | NULL |
| ] | NULL | NULL |
| NULL | abcd | NULL |
| NULL | 王-123 | NULL |
| NULL | ^*123 | NULL |
| NULL | 12 | NULL |
| NULL | 一二三四五 | NULL |
+------+-----------------+------+
9 rows in set (0.00 sec)

# 下面測試發現M的范圍是[0,255]
mysql> alter table char_tb1 add column col4 char(0);
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table char_tb1 add column col5 char(255);
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> alter table char_tb1 add column col5 char(256);
ERROR 1074 (42000): Column length too big for column 'col5' (max = 255); use BLOB or TEXT instead

赞(0)