思路话语

。Arlen:思想有多远你就能走多远...

mysql varchar char text

建表时IP字段设成了varchar,但是由于要对其建索引,以达到与其它表结合查询时提高效率的目的,打算将它改成char,修改后竟然没有成功。
最后发现原来要改就必须把该表中的所有varchar和text的字段一次性都改为char:
alter table ip_table modify ipddress char(16) default '',modify status char(10) default '',modify memo char(255) default '';

 又试了下,如果原表中都是char,只要把其中一个字段改为varchar或者text,则其它所有char字段自动改为varchar
……
alter table ip_table modify memo text;
之后表中的情况:
ipddress varchar(16)
status varchar(10)
memo text

mysql也太扯了……
到网上找了找,找到这样一个解释:
http://topic.csdn.net/t/20031117/21/2466393.html

在同一个表中不能混用CHAR   和VA   R   C   H   A   R。MySQL   根据情况甚至会将列从一种类型转换为另一种类型。这样做的原因如下:  
  ■   行定长的表比行可变长的表容易处理(其理由请参阅2   .   3节“选择列的类型”)。  
  ■   表行只在表中所有行为定长类型时是定长的。即使表中只有一列是可变长的,该表的  
  行也是可变长的。  
  ■   因为在行可变长时定长行的性能优点完全失去。所以为了节省存储空间,在这种情况  
  下最好也将定长列转换为可变长列。  
  这表示,如果表中有VARCHAR   列,那么表中不可能同时有CHAR   列;MySQL   会自动  
  地将它们转换为VARCHAR   列。例如创建如下一个表:  
   
  CREATE   TABLE   my_table  
  (  
        c1   CHAR(10),  
        c2   VARCHAR(10)  
  )  
   
  如果使用DESCRIBE   my_table   查询,则其输出如下:  
   
  Feild     Type                 Null     Key     Default     Extra  
  c1           varchar(10)   yes                 null          
  c2           varchar(10)   yes                 null          
   
  请注意,VARCHAR   列的出现使MySQL   将c1   也转换成了VARCHAR   类型。如果试图用  
  A   LTER   TABLE   将c1   转换为C   H   A   R,将不起作用。将VARCHAR   列转换为CHAR   的惟一办  
  法是同时转换表中所有VARCHAR   列:  
   
  ALTER   TABLE   my_table   MODIFY   c1   CHAR(10),MODIFY   c2   CHAR(10)

posted on 2007-11-23 11:42  Arlen  阅读(2173)  评论(2编辑  收藏  举报

导航