Revision: 12094
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at March 2, 2009 05:07 by rolandog
Initial Code
/* ¡IMPORTANTE! * Este es un tutorial para convertir la codificación de bases de datos de * latin1 a utf8. MySQL anteriormente solo utilizaba codificación latin1, y una * colación latin1_swedish_ci. */ /* Algoritmo: * Al convertir los campos a su valor en binario, se puede cambiar la * codificación, sin tener que preocuparse por los caracteres especiales: * CHAR -> BINARY * VARCHAR -> VARBINARY * TINYTEXT -> TINYBLOB * TEXT -> BLOB * MEDIUMTEXT -> MEDIUMBLOB * LONGTEXT -> LONGBLOB * Los siguientes queries nos ayudan en convertir a y regresar de binario. */ /* MyDb * Se infiere que la base de datos se llama MyDb. */ /* Correr en information_schema * El código SQL de estos queries se debe correr en la base de datos llamada * information_schema. Los queries generan código SQL que se debe correr en la * base de datos 'MyDb'. */ USE information_schema; /* I. Identificar binarios preexistentes * Este SQL -- asà como el siguiente paso -- es un paso de precaución; hay que * anotar los campos que aparezcan aquÃ, para identificar cuáles campos ya eran * de tipo binario. Si no aparecen campos, es motivo de alegrÃa. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'binary', 'char'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%binary%'; /* II. Identificar blobs preexistentes * Este SQL también es un paso de precaución; hay que anotar los campos que * aparezcan aquÃ. Aquà buscamos los campos de tipo blob. Si no aparecen * campos, es motivo de alegrÃa. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'blob', 'text'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%blob%'; /* III. CHAR -> BINARY * Conversión de cualquier tipo de Char a su correspondiente Binario. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'char', 'binary'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%'; /* IV. TEXT -> BLOB * Conversión de cualquier tipo de Texto a su correspondiente Blob. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'text', 'blob'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%'; /* V. Convertir MyDb de latin1 a utf8 * Esto convierte y asigna una colación en Unicode a la base de datos. Pero aún * falta considerar las tablas y los campos en particular. */ ALTER DATABASE MyDb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; /* VI. Convertir Tablas de MyDb de latin1 a utf8 * Este query es para cambiar la codificación de las tablas. */ SELECT CONCAT('ALTER TABLE ', table_name, ' DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;') FROM tables WHERE table_schema = 'MyDb'; /* VII. Convertir Campos de tipo Char de las Tablas de MyDb de latin1 a utf8 * Este query es para cambiar la codificación los chars de las tablas. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8 COLLATE utf8_unicode_ci;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%char%'; /* VIII. Convertir Campos de tipo Text de las Tablas de MyDb de latin1 a utf8 * Este query es para cambiar la codificación los textos de las tablas. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', column_type, ' CHARACTER SET utf8 COLLATE utf8_unicode_ci;') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%text%'; /* IX. BINARY -> CHAR * Convierte los binarios a chars. Hay que manualmente eliminar queries de los * resultados de el paso I. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'binary', 'char'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%binary%'; /* X. BLOB -> TEXT * Revierte los blobs a textos. Hay que manualmente eliminar queries de los * resultados de el paso II. */ SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', REPLACE(column_type, 'blob', 'text'), ';') FROM columns WHERE table_schema = 'MyDb' and data_type LIKE '%blob%';
Initial URL
http://rolandog.com
Initial Description
Initial Title
Conversión de Latin1 a UTF8
Initial Tags
wordpress
Initial Language
MySQL