MySQL 5.1中varchar类型中文和英文长度的问题


今天,也是突发奇想,在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字节。

相关内容