mysql varchar(50) 不管中文 還是英文 都是存50個的 MySQL5的文件,其中對varchar欄位型別這樣描述:varchar(m) 變長字串。M 表示最大列長度。M的範圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,最大有效長度是65,532位元組)。為何會這般變換?真是感覺MySQL的手冊做的太不友好了,因為你要仔細的繼續往下讀才會發現這段描述:MySQL 5.1遵從標準SQL規範,並且不刪除VARCHAR值的尾部空格。VARCHAR儲存時用一個位元組或兩個位元組長的字首+資料。如果VARCHAR列宣告的長度大於255,長度字首是兩個位元組。好了,貌似懂了一點。但具體他說的長度大於255時使用2個位元組長度字首,小學減法題:65535 - 2 = 65533啊。不知道這些大牛如何計算的,暫且保留疑問吧?注:我測試了一下使用UTF8編碼,varchar的最大長度為21854位元組。在mysql 5.0.45版本,資料庫編碼utf8下進行測試:varchar最長定義為21785。也就是說不論字母、數字、漢字,只能放21785個。推想:varchar位元組最大65535,utf8編碼一個字元3個位元組65535/3=21785。
mysql varchar(50) 不管中文 還是英文 都是存50個的 MySQL5的文件,其中對varchar欄位型別這樣描述:varchar(m) 變長字串。M 表示最大列長度。M的範圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,最大有效長度是65,532位元組)。為何會這般變換?真是感覺MySQL的手冊做的太不友好了,因為你要仔細的繼續往下讀才會發現這段描述:MySQL 5.1遵從標準SQL規範,並且不刪除VARCHAR值的尾部空格。VARCHAR儲存時用一個位元組或兩個位元組長的字首+資料。如果VARCHAR列宣告的長度大於255,長度字首是兩個位元組。好了,貌似懂了一點。但具體他說的長度大於255時使用2個位元組長度字首,小學減法題:65535 - 2 = 65533啊。不知道這些大牛如何計算的,暫且保留疑問吧?注:我測試了一下使用UTF8編碼,varchar的最大長度為21854位元組。在mysql 5.0.45版本,資料庫編碼utf8下進行測試:varchar最長定義為21785。也就是說不論字母、數字、漢字,只能放21785個。推想:varchar位元組最大65535,utf8編碼一個字元3個位元組65535/3=21785。