数据库使用的是gb2312编码,其中一个表的某个字段是varchar类型,长度为10。在测试的时候发现写入英文字母时,最多写入10个,这个没感觉有什么问题,但是写入汉字时,最多也可以写10个,而个人认为应该最多写5个汉字,这个感觉很迷惑,不知道这是为什么,请高手指教。

解决方案 »

  1.   

    因为字符集是GBK,双字节字符集,1个汉字1个字节。
    GBK 亦采用双字节
      

  2.   

    2楼的高手,小弟没看明白,在网上查了,说是“GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1”。难道,使用gb2312编码后,varchar(1)表示一个双字节了?
      

  3.   

    对,在GBK下,varchar(1)可以为1个字母、数字、汉字
      

  4.   

    还有点迷糊。是否可以这样理解,如果varchar(1)表示一个字母,它在物理上占用一个字节,而如果表示一个汉字,在物理上占用两个字节?