varchar 在mysql中 是属于多字节还是属于unicode???
如何验证真伪呢???  sql不像高级语言,没法调试来验证。  2. c++ 中 一个 unicode"hello"(12字节的字符串)存到 varchar(6)中,那么有可能造成溢出,存不下??还是数据库以前做了转换,把这字符串转成了 6个字节的字符串???

解决方案 »

  1.   

    多字节看你定义那个字段时指定的字符集是什么。 如果说是latin1 ,VARCHAR(6)就是6个字节。 如果是gbk则就是12字节。如果是UNICODE,则可以是 18个字节。MYSQL中以字符为VARCHAR的单位,不是字节。
      

  2.   

    VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。同CHAR对比,VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符不是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入
      

  3.   

    unicode有多种表示方式,如果是utf-8, hello仍然是6个字节。
      

  4.   

    回复3楼unicode 其中的重要一个概念:每个字符是2字节,学习高级语言,比如:c++,的时候 都说过,一个字符2字节对于多字节, 如果是英文字符,则是1字节, 中文字符是2字节, 其他国家的字符,不知道。我装mysql的时候,貌似是gbk 或gb2312,具体什么,我也忘记了
      

  5.   

    不是已经解释的很清楚了?!MYSQL中varchar(N) , N是指字符。 而一个字符多少个字节则和你定义的字符集有关。