1. 程式人生 > >mysql 編碼和漢字儲存佔用位元組問題的探索

mysql 編碼和漢字儲存佔用位元組問題的探索

MySql 5.0 以上的版本:

1、一個漢字佔多少長度與編碼有關:

UTF-8:一個漢字 = 3個位元組,英文是一個位元組
GBK: 一個漢字 = 2個位元組,英文是一個位元組
2、varchar(n) 表示n個字元,無論漢字和英文,MySql都能存入 n 個字元,僅實際位元組長度有所區別。[注意]

3、MySQL檢查長度,可用SQL語言 SELECT LENGTH(fieldname) FROM tablename 這個命令可以看到各行使用的位元組數。

mysql版本5.6.32-78.0下面用實際例子來說明問題:

1. 首先建立一張臨時用表:

create TEMPORARY table medivac(
    name VARCHAR(10)
); CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

2. 插入一些資料:
INSERT INTO medivac (name) VALUES ('' at line 1
mysql> INSERT INTO medivac (name) VALUES ('a');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO medivac (name) VALUES ('哈');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO medivac (name) VALUES ('\U+1F604');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO medivac (name) VALUES ('哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈');
Query OK, 1 row affected, 1 warning (0.00 sec)
3. 查看錶中資料:
select * from medieval
+--------------------------------+
| name                           |
+--------------------------------+
| a                              |
| 哈                             |
|