MySQL 5.1中varchar類型中文和英文長度的問題

來源:互聯網
上載者:User

今天,也是突發奇想,在MySQL上驗證varchar(15)會存15個中文,超過的會自動截取前15個。 一直抱守舊的觀念(這種觀念可能來源與sql server),varchar類型中,中文佔兩個位元組,因此只能存varchar長度的一半的中文字數。但實際上,在MySQL中不管是中文還是英文,都是長度值,只是資料庫”的文章">資料庫選擇不同字元編碼時,varchar最大長度不一樣,但同一編碼下英文和中文的長度是一樣。

MySQL5的文檔,其中對varchar欄位類型這樣描述:varchar(m) 變長字串。M 表示最大列長度。M的範圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字元集確定,最大有效長度是65,532位元組)。

MySQL 5.1遵從標準SQL規範,並且不刪除VARCHAR值的尾部空格。VARCHAR儲存時用一個位元組或兩個位元組長的首碼+資料。如果VARCHAR列聲明的長度大於255,長度首碼是兩個位元組。

好了,貌似懂了一點。但具體他說的長度大於255時使用2個位元組長度首碼,小學減法題:65535 - 2 = 65533啊。不知道這些大牛如何計算的,暫且保留疑問吧?

註:我測試了一下使用UTF8編碼,varchar的最大長度為21854位元組。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.