2012-01-18 11 views
54

C'è un MySQL table che ha questa definizione tratta da SQLYog Enterprise:Come modificare il set di caratteri predefinito di una tabella 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 

voglio cambiare il default charset di questo tavolo da latin1 a utf8. Come farlo ?

risposta

131

Se si desidera modificare la tabella default character set e tutte le colonne di caratteri a un nuovo set di caratteri, utilizzare un'istruzione come questa:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; 

Quindi interrogazione sarà:

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8; 
+13

Al contrario, se si utilizza la sintassi ALTER TABLE TBL 'CARATTERI utf8' come suggerito da altri, si cambierà solo la codifica predefinita per la tavola; le colonne esistenti non verranno convertite come faranno se si utilizza questa risposta. – eaj

+4

Se si desidera applicare questa modifica per tutte le tabelle che non sono codificate in ut8 in un database, è possibile utilizzare questa query ed eseguire le query risultanti: 'SELECT concat ('alter table', table_name, 'CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ') FROM information_schema.tables WHERE table_schema =' 'e table_collation! =' Utf8_general_ci 'GROUP BY nome_tabella; ' – Maxooo

+2

questo non modifica il set di caratteri ** predefinito **. per cambiare il default fare come eak detto 'ALTER TABLE tbl CHARACTER SET utf8' –

2

Il comando ALTER TABLE MySQL dovrebbe fare il trucco. Il seguente comando cambierà il set di caratteri predefinito della tabella e il set di caratteri di tutte le sue colonne in UTF8.

ALTER TABLE etape_prospection CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

Questo comando convertirà tutte le colonne di testo della tabella nel nuovo set di caratteri. I set di caratteri utilizzano diverse quantità di dati per carattere, in modo da MySQL convertire il tipo di alcune colonne per garantire c'è abbastanza spazio per montare lo stesso numero di caratteri come il vecchio tipo di colonna.

vi consiglio di leggere il ALTER TABLE MySQL documentation prima di modificare i dati in tempo reale.

+1

Sì, lo fa fai il trucco, ma una cosa è diversa con il ** convert to ** way: non può rimuovere automaticamente la vecchia opzione charset dalle colonne. –

13

Modifica della tabella charset di default:

ALTER TABLE etape_prospection 
    CHARACTER SET utf8, 
    COLLATE utf8_general_ci; 

Per cambiare stringa colonna charset exceute questa query:

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

Non dovresti mai usare mai utf8_general_ci: semplicemente non funziona. È un ritorno ai brutti vecchi tempi della stiiopeeedity ASCII di cinquant'anni fa. La corrispondenza senza distinzione tra maiuscole e minuscole Unicode non può essere eseguita senza la mappa di foldcase dall'UCD. Ad esempio, "Σίσυφος" ha tre diversi sigma in esso; o come la minuscola di "TSCHüẞ" è "tschüβ", ma la "maiuscola" di "tschüβ" è "TSCHÜSS". Puoi avere ragione o essere veloce. Quindi devi usare utf8_unicode_ci, perché se non ti interessa la correttezza, allora è banale renderlo infinitamente veloce. – NPE

2

È possibile modificare il valore predefinito con una alter table set default charset ma che non cambierà il set di caratteri del colonne esistenti. Per cambiare devi usare un alter table modify column.

Cambiare il set di caratteri di una colonna significa solo che sarà in grado di memorizzare una più ampia gamma di caratteri. La tua applicazione parla al db usando il client mysql, quindi potresti aver bisogno di cambiare anche la codifica del client.

+0

Mi sarebbe se non fosse per la tastiera limitata su iPod touch :-) – Joni

+0

bene il mosto iPod Touch/iPhone * * * hanno un po '* svantaggio. :-P Non mi sono mai accorto che mancano fino a quando non l'hai menzionato. ;-) – Aufwind

Problemi correlati