Mysql
 sql >> Database >  >> RDS >> Mysql

Modifica della codifica dei caratteri MySQL. L'integrità dei dati è preservata?

Ogni colonna (tipo stringa di caratteri). ha il suo proprio set di caratteri e metadati di confronto.

Se, quando la colonna è stato specificato il tipo di dati di (ovvero quando è stato creato o modificato l'ultima volta), nessun set di caratteri/confronto è stato fornito in modo esplicito, quindi il set di caratteri e le regole di confronto predefiniti della tabella sarebbero stati utilizzati per la colonna.

Se, quando la tabella è stato specificato, non è stato fornito alcun set di caratteri/confronto predefinito, quindi il set di caratteri e le regole di confronto predefiniti del database sarebbero stati utilizzati per l'impostazione predefinita della tabella.

I comandi che citi nella tua domanda semplicemente alterano tali set di caratteri/confronti predefiniti rispettivamente per il database e la tabella. In altre parole, influenzeranno solo le tabelle e le colonne create in seguito, ma non influiscono sulle colonne (o sui dati) esistenti.

Per aggiornare i dati esistenti, dovresti prima leggere il Modifica del set di caratteri sezione della pagina di manuale su ALTER TABLE :

Per modificare solo il predefinito set di caratteri per una tabella, usa questa istruzione:

ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;

La parola DEFAULT è facoltativo. Il set di caratteri predefinito è il set di caratteri utilizzato se non specifichi il set di caratteri per le colonne che aggiungi a una tabella in un secondo momento (ad esempio, con ALTER TABLE ... ADD column ).

Quando il foreign_key_checks la variabile di sistema è abilitata, che è l'impostazione predefinita, la conversione del set di caratteri non è consentita nelle tabelle che includono una colonna di stringa di caratteri utilizzata in un vincolo di chiave esterna. La soluzione alternativa è disabilitare foreign_key_checks prima di eseguire la conversione del set di caratteri. È necessario eseguire la conversione su entrambe le tabelle coinvolte nel vincolo di chiave esterna prima di riattivare foreign_key_checks . Se riattivi foreign_key_checks dopo aver convertito solo una delle tabelle, un ON DELETE CASCADE o ON UPDATE CASCADE l'operazione potrebbe danneggiare i dati nella tabella di riferimento a causa della conversione implicita che si verifica durante queste operazioni (Bug #45290, Bug #74816).