mysql varchar char text

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.