建表時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)