Innodb表 如果char 长度大于 3 就会自动变为 varchar.你可以象这样见表create talbe temp(n1 char(1),n2 char(10)) type = myisam;

解决方案 »

  1.   

    6.5.3.1 隐式的列定义变化在某些情况下,MySQL 隐式地改变一个在 CREATE TABLE 给定的列的规约。(这在 ALTER TABLE 中也可能发生。): 长度不超过四个字节的 VARCHAR 列被改变为 CHAR。 如果在一个表中有任何一个列是变长的,则结果是整个记录行也是变长的。因此,如果一个表中包含任何变长的列(VARCHAR、TEXT 或 BLOB),所有长于 3 个字符的 CHAR 列将被改变为 VARCHAR 列。这在任何方面都不影响你如何使用该列;在 MySQL 中,VARCHAR 只是存储字符的另一个不同的方法。MySQL 执行这个转换,是因为它节省空间,并且使表操作更快。查看章节 7 MySQL 表类型。 TIMESTAMP 的显示尺寸必须是在 2 到 14 范围之内的偶数。如果指定显示尺寸为 0 或超过 14,尺寸被强制设为 14。从 1 到 13 范围内的奇数值尺寸将被强制为下一个更大的偶数。 你不能在一个 TIMESTAMP 列中存储一个文字 NULL;将一个 NULL 值赋给它将设置它为当前的日期和时间。因为 TIMESTAMP 列的行为就是这样,列的 NULL 和 NOT NULL 属性不以常态方式影响它,如果你指定它,将被忽略。DESCRIBE tbl_name 总是报告一个 TIMESTAMP 列被赋于了 NULL 值。 MySQL 将其它 SQL 数据库供应商使用的列类型映射到 MySQL 类型。查看章节 6.2.5 使用来自其它的数据库引擎的列类型。 
    如果你希望知道在你创建或改变了你的表后, MySQL 是否使用了不同于你所指定的列类型,你可以发出一个 DESCRIBE tbl_name 语句。