Vi siete mai trovati a dover convertire una, alcune o tutte le tabelle di un vostro Database MySQL da MyISAM a InnoDB e/o viceversa?
Ecco un paio di query che potete utilizzare per compiere l'operazione in modo semplice ed efficiente. Come avrete modo di vedere le query non eseguono i comandi direttamente, ma sono pensate per creare un elenco di query che andranno poi eseguite per ottenere l'effetto sperato. Per eseguirle, copiatele e incollatele all'interno di qualsiasi MySQL GUI o command-line tool, tenendo presente che ogni riga equivale a una singola query.
Per convertire tutte le tabelle di DBNAME da InnoDB a MyISAM
1 2 |
SELECT CONCAT('ALTER TABLE DBNAME.', TABLE_NAME,' ENGINE=MyISAM;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'DBNAME' AND ENGINE = 'InnoDB' AND TABLE_TYPE = 'BASE TABLE' |
Per convertire tutte le tabelle di DBNAME da MyISAM a InnoDB
1 2 |
SELECT CONCAT('ALTER TABLE DBNAME.', TABLE_NAME,' ENGINE=InnoDB;') FROM Information_schema.TABLES WHERE TABLE_SCHEMA = 'DBNAME' AND ENGINE = 'MyISAM' AND TABLE_TYPE = 'BASE TABLE' |
Per convertire tutte le tabelle da InnoDB a MyISAM (tutti i database)
1 2 |
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=MyISAM;') FROM information_schema.TABLES WHERE ENGINE = 'InnoDB'; |
Per convertire tutte le tabelle da MyISAM a InnoDB (tutti i database)
1 2 |
SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' engine=InnoDB;') FROM information_schema.TABLES WHERE ENGINE = 'MyISAM'; |
Lo ripetiamo ancora una volta, giusto per essere sicuri: questi comandi non eseguiranno alcuna modifica al vostro DB, si limiteranno a compilare una serie di query che andranno eseguite successivamente - e che andranno, queste si, a modificare il DB.
Per il momento è tutto: felice conversione!
UPDATE: Utilizzando un metodo analogo a quello di cui sopra è possibile modificare la Collation di uno o più Database, con tutte le Tabelle e/o il Character Set delle Colonne ivi contenute. Per maggiori informazioni consigliamo di leggere questo articolo.