怪我咯2017-04-17 11:13:21
在字符集為UTF-8的情況下:
ver < 4.1
: VARCHAR以字節為單位存儲,所以假設全部為常用漢字(UTF-8 3字節編碼長度),則VARCHAR(255)共可存放約85個漢字;ver >= 4.1
: VARCHAR以字符為單位存儲,假設輸入仍然為常用漢字,則VARCHAR(255)可以存放255個漢字。另外,據我所知,MySQL對UTF-8的支持也僅僅限於1~3字節編碼長度(Unicode:0x0000~0xFFFF),可以滿足大部分需求,但是生僻字就不行了。
高洛峰2017-04-17 11:13:21
好吧這問題的最佳答案難選了 ... 我是來添亂的 ...
樓上三個回複都正確但都不全麵 ...這事情主要還是看 數據庫字符集 ...
如果是 latin1 的話 ... 計算字節長度 ... greatghoul 的答案是對的 ...
如果是 utf-8 的話 ... 計算字符長度 ... joyeu 的答案是對的 ...
至於 Theo 的答案裏說的 4.1 為臨界點的區別 ... 這事情真心和版本沒什麼關係 ...
隻是因為 4.1 之後才引入字符集支持的口牙!
如果選 latin1 的話不管什麼版本都會計算字節長度的口牙!
為了避免這個答案看起來是完全照抄了樓上 ... 我提一點其他的東西 ...
其實這題目裏有另外一個坑 ... 就是要保存的東西是 漢字 ...
如果要保存 utf-8 字符的話 latin1 字符集可以保存 63 - 127 個 ...
但如果要保存漢字 ... 那麼最大數量恐怕隻有精確的 85 個 ...
因為我在碼這些字之前自己想盡了一切方法測試都沒能找到一個占用四字節的漢字 ...
怾gi
黁nun
兺bun
乯olo
乭daori
旕eosi
銰ngai
虄sari
哛popuni
硛ceoke
縇seone
穒keweoke
這組字夠不夠生僻 ..? 每個字也僅僅占用三字節而已 ...
至於兩字節的漢字 ... 我也找不到 ... greatghoul 說的 〇
是錯的 ... 〇
占用三字節 ...
來個總結性陳詞 ...
MySQL 中的 VARCHAR(255) 可以存放 1 - 255 個 UTF-8 格式的漢字 ...
latin1 字符集最多可以存放 85 個 UTF-8 格式的漢字 ...
utf-8 字符集最多可以存放 255 個 UTF-8 格式的漢字 ...
如果誰可以找到一個占用兩字節或者占用四字節的漢字那麼我的這個答案就錯了 ...
找不到的話可以姑且信之 ...
以上 ...
大家讲道理2017-04-17 11:13:21
這個要看佻存的什麼字了,utf-8 是變長了,有的漢字占3個,有得占四個。
可以參考這篇文章:
http://blog.csdn.net/chummyhe89/artic...
占2個字節的:〇
占3個字節的:基本等同於GBK,含21000多個漢字
占4個字節的:中日韓超大字符集裏麵的漢字,有5萬多個
一個utf8數字占1個字節
一個utf8英文字母占1個字節
迷茫2017-04-17 11:13:21
MySQL5下應該是255個。對於latin1的字符集的情況,中文存進去就是亂碼了,select出來顯示為英文問號?
MySQL5下Varchar(2)的實測情況如下:
CREATE TABLE `test`.`tb1`( `p1` VARCHAR(2) ) CHECKSUM=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=utf8 ;
INSERT INTO `test`.`tb1`(`p1`) VALUES ( '你好');
INSERT INTO `test`.`tb1`(`p1`) VALUES ( '你很坏');
INSERT INTO `test`.`tb1`(`p1`) VALUES ( '1234');
SELECT * FROM `test`.`tb1` LIMIT 0, 50;
得到:
你好
你很
12
CREATE TABLE `test`.`tb2`( `p1` VARCHAR(2) ) CHECKSUM=1 COMMENT='' DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC CHARSET=latin1 ;
INSERT INTO `test`.`tb2`(`p1`) VALUES ( '1234');
INSERT INTO `test`.`tb2`(`p1`) VALUES ( '你好');
INSERT INTO `test`.`tb2`(`p1`) VALUES ( '你12');
SELECT * FROM `test`.`tb2` LIMIT 0, 50;
得到:
12
??
?1
伊谢尔伦2017-04-17 11:13:21
感覺上麵兩個答案都是不對的,MySQL中的char或者varchar括號中的數字指的是最大字符個數,不是字節數。所有255就是說最多允許255個漢字,如果有字母存在,字母和漢字的總數還是不能超過255個。