TIGblogs TIG | TIGblogs TIGBLOGS GRUPALES ENTRAR INSCRíBASE
rolandog
rolandog
« anteriores 5


No Logro Convertir de Latin1 a UTF8

He estado intentando convertir mi base de datos en codificación latin1 con colación latin1_swedish_ci a utf8 con colación utf8_unicode_ci; llevo fácil más de tres horas en las que he estado adaptando las instrucciones que me encontré en el sitio oficial de WordPress e inclusive opté por hacer mi propia adaptación al español para poder publicarlo aquí­, sintiéndome triunfante:

¡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%';

Pero me siento algo desmoralizado por no lograr entender qué es lo que está sucediendo. Esta instalación de WordPress data un año atrás; pero ha sido actualizada obviamente por el sistema de actualización del robotito feliz de DreamHost. Cabe mencionar que las instalaciones anteriores a WordPress 2.yferia no incluyen ciertos parámetros de especificación de codificación y colación de la base de datos.

Lo que no estoy seguro es qué exactamente aplica para el caso de mi instalación de WordPress ya que yo opté desde un inicio utilizar latin1 en vez de utf8 como opción de WordPress. La base de datos está adecuadamente configurada como latin1 (MySQL tiene como opción predeterminada de latin1 el asignar una colación de latin1_swedish_ci). Pero creo conveniente cambiarme a UTF8 con colación UTF8_unicode_ci, ya que es lo que Joel recomienda.


March 2, 2009 | 5:03 AM Comentarios  1 comentarios

Etiquetas:


« anteriores 5


Perfil de rolandog


Posteos Recientes
Triclamp Butt Weld...
Nueva Adecuación en...
Kindle ScreenSavers
Disque Reclutadores
Nicholas … Barbon

Archivo Mensual
Mayo 2005
Junio 2005
Julio 2005
Agosto 2005
Noviembre 2005
Diciembre 2005
Enero 2006
Febrero 2006
Marzo 2006
Julio 2006
Agosto 2006
Septiembre 2006
Octubre 2006
Noviembre 2006
Diciembre 2006
Enero 2007
Febrero 2007
Marzo 2007
Abril 2007
Mayo 2007
Junio 2007
Julio 2007
Agosto 2007
Septiembre 2007
Octubre 2007
Diciembre 2007
Enero 2008
Febrero 2008
Marzo 2008
Abril 2008
Mayo 2008
Junio 2008
Julio 2008
Agosto 2008
Octubre 2008
Noviembre 2008
Diciembre 2008
Enero 2009
Febrero 2009
Marzo 2009
Abril 2009
Mayo 2009
Junio 2009
Julio 2009
Agosto 2009
Octubre 2009
Noviembre 2009
Febrero 2010
Marzo 2010
Junio 2010
Julio 2010
Agosto 2010
Diciembre 2010
Agosto 2011
Octubre 2011

Cambiar idioma


Archivo de Etiquetas
bicicleta consejos cool cortada dedo dieta ejercicio enfermedad funny funnylinks gusanitovirusexe interesting links madrid monito musica news noviazgo parque policias posts ramblings recuerdos salud savate seguridad uncategorized updates vacaciones women


208656 views