为给表register添加一列,但出现错误。错误为:ERROR 1170 (42000): BLOB/TEXT column 'realm' used in key specification without a key length表的定义为
CREATE TABLE `register` (
  `username` text,
  `realm` tinytext,
  `password` tinytext,
  `token` varchar(10) default NULL,
  `sequence` int(11) default NULL,
  `hash` varchar(40) default NULL,
  KEY `username` (`username`(255)),
  KEY `realm` (`realm`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8修改表插入一列的语句为:alter table register add column nickname tinytext after password;搜了一下都是关于主键若是BLOB类型的,需要指定长度。可是我在定义的时候已经指定了长度,为什么修改表的时候出错呢? 

解决方案 »

  1.   

    把realm和username都需要改成varchar吧
      

  2.   

    为什呢?
    如果我直接写在create语句中就没有错,alter就有错。是我的alter语句不对吗?
      

  3.   

    因为ALTER 表的时候要建立临时表操作!所以正确语句如下:
    CREATE TABLE `register` (
      `username` text,
      `realm` tinytext,
      `password` tinytext,
      `token` varchar(10) default NULL,
      `sequence` int(11) default NULL,
      `hash` varchar(40) default NULL
    ) ENGINE=innodb DEFAULT CHARSET=utf8 ;
    alter table register add nickname tinytext not null after `password`; 
    alter table register add key idx_realm (realm(255)),add key idx_username (username(255));
      

  4.   

    也就是创建表的时候不需要指定 “KEY ·uername·(username(255))"。
    但我现在表已经建立了,里面也保存数据了,我不想drop这个表。
    alter语句可不可以将“KEY ·uername·(username(255))"键值约束取掉,然后再插入一列,然后再加上键值约束
      

  5.   

    你要知道
    tinytext 等价于 varchar(255)好好想想怎么回事!!!