VARCHAR(n) 的 n 代表字符數,而非字節數。無論中文、英文、Emoji,每個字符計數為 1。
CREATE TABLE t(name VARCHAR(10)) CHARSET=utf8;
INSERT INTO t VALUES('1234567890'); -- 10 字節,10 字符 ✓
INSERT INTO t VALUES('一二三四五六七八九十'); -- 30 字節,10 字符 ✓
INSERT INTO t VALUES('一二三四五六七八九十1'); -- 31 字節,11 字符 ✗ ERROR 1406
CREATE TABLE t(name VARCHAR(10)) CHARSET=gbk;
INSERT INTO t VALUES('一二三四五六七八九十'); -- 20 字節,10 字符 ✓
| 函數 | 返回值 | 示例:'一二三' |
|---|---|---|
LENGTH() | 字節數 | UTF8: 9, GBK: 6 |
CHAR_LENGTH() | 字符數 | 3 |
MySQL 4.x 時代 VARCHAR 長度單位為字節,5.0+ 統一改為字符。舊專案遷移需注意。