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).