2012-01-18 18 views
54

SQLYog Enterpriseから取られ、この定義があるのMySQL tableがあります:私はutf8latin1からこのテーブルのdefault charsetを変更したいMySQLテーブルのデフォルトの文字セットを変更するには?

Table    Create Table            
----------------- --------------------------------------------------------- 
etape_prospection CREATE TABLE `etape_prospection` (      
        `etape_prosp_id` int(10) NOT NULL AUTO_INCREMENT,  
        `type_prosp_id` int(10) NOT NULL DEFAULT '0',   
        `prosp_id` int(10) NOT NULL DEFAULT '0',    
        `etape_prosp_date` datetime DEFAULT NULL,    
        `etape_prosp_comment` text,        
        PRIMARY KEY (`etape_prosp_id`),       
        KEY `concerne_fk` (`prosp_id`),       
        KEY `de_type_fk` (`type_prosp_id`)      
        ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 

が。どうやってするか ?

答えて

131

あなたは、このようなステートメントを使用して、新しい文字セットにテーブルdefault character setと、すべての文字列を変更したい場合:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

ので、クエリは次のようになります。

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8; 
+13

これとは対照的に、 'ALTER TABLE tbl CHARACTER SET utf8'構文を他の人に示唆されているように使用すると、tableのデフォルトエンコーディングだけが変更されます。この回答を使用する場合、既存の列はそのまま変換されません。 – eaj

+4

データベース内のut8でエンコードされていないすべてのテーブルに対してこの変更を適用する場合は、このクエリを使用して結果のクエリを実行できます: 'SELECT concat( 'alter table'、table_name、 'CONVERT TO CHARACTER SET utf8 table_collat​​ion!= 'utf8_general_ci' GROUP BY table_name; ' – Maxooo

+2

これは**デフォルト**文字セットを変更していません。 'ALTER TABLE tbl CHARACTER SET utf8' –

2

ALTER TABLEこのコマンドはトリックを行う必要があります。次のコマンドは、テーブルのデフォルト文字セットとすべての列の文字セットをUTF8に変更します。

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

このコマンドは、テーブル内のすべてのテキストのような列を新しい文字セットに変換します。文字セットは文字ごとに異なる量のデータを使用するため、MySQLは一部の列の型を変換して、古い列型と同じ文字数に収まるようにします。

ライブデータを変更する前にALTER TABLE MySQL documentationを読むことをお勧めします。

+1

はい、それはありませんトリックを行いますが、** convert to **という方法では異なる点があります。古いcharsetオプションを自動的に列から削除することはできません。 –

13

変更テーブルのデフォルトの文字セット:

ALTER TABLE etape_prospection 
    CHARACTER SET utf8, 
    COLLATE utf8_general_ci; 

文字列の文字セットexceuteを変更するには、このクエリ:

ALTER TABLE etape_prospection 
    CHANGE COLUMN etape_prosp_comment etape_prosp_comment TEXT CHARACTER SET utf8 COLLATE utf8_general_ci; 
+2

あなたは決してutf8_general_ciを使用するべきではありません。単に動作しません。これは50年前のASCII stooopeeedityの悪い昔の時代への後戻りです。 UCDからの折り畳み地図なしでは、Unicodeの大文字と小文字を区別しないマッチングはできません。たとえば、 "Σίσυφος"には3つの異なるシグマがあります。または "TSCHüẞ"の小文字が "tschüβ"であるが、 "tschüβ"の大文字が "TSCHÜSS"である方法。あなたは正しいことができますか、またはあなたは速くなることができます。したがって、utf8_unicode_ciを使用する必要があります。なぜなら、正確性を気にしなければ、無限に速くするのは簡単なことではないからです。 – NPE

2

あなたはalter table set default charsetでデフォルトを変更することができますが、それはの文字セットを変更しません。既存の列。これを変更するには、alter table modify columnを使用する必要があります。

列の文字セットを変更すると、より広い範囲の文字を格納できるということだけが意味されます。あなたのアプリケーションはmysqlクライアントを使ってdbと会話するので、クライアントのエンコーディングも変更する必要があります。

+0

iPod touchのキーボードが限定されていない場合は、 – Joni

+0

iPod Touch/iPhone *に*欠点*がある必要があります。あなたがそれを言及するまで彼らが行方不明になっていることを決して実感しません。 ;-) – Aufwind

関連する問題