在windows下,mysql版本:5.6.7rc以下是表和字段的信息:
====================================
  Field: vc
   Type: varchar(4)
   Null: YES
    Key:
Default: NULLENGINE=InnoDB DEFAULT CHARSET=utf8
=====================================执行命令:insert into typetest
                 set vc='一一一一';执行后能成功存储四个汉字“一”;请教各位,既然定义的是4个字节,为何还能输入4个汉字呢?

解决方案 »

  1.   

    另外补充请教一个问题:
    设置了一个字段:ti tinyint(1);
    但为何能插入:set ti=111
    且select显示结果为:ti: 111那么tinyint(1)这个括号里的1代表什么意义呢?
      

  2.   

    4个字符吧。
    tinyint 范围是 -128~127.
    tingint(1)是显示一位。
    同求大神解释清楚...
      

  3.   

    varchar(4) 在MYSQL中是四个字符,不是四个字节。如果是UTF,它可能是 12个字节。
      

  4.   


    MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。
      

  5.   

    我想lz对mysql还不太了解,varchar与char的区别你可知道??!!varchar是可变类型的,你虽然定义了4个字符,但是他是可变的;而且他是四个字符不是四个字节
    一些有关mysql的总结:http://blog.csdn.net/tianyazaiheruan/article/category/1154354
    希望可以帮助你
      

  6.   


    那么“显示宽度”是否是指:select查询结果显示出的内容呢?
      

  7.   

    具体占用空间可以到informatio_schema库的tables表看