Posted By

rolandog on 03/02/09


Tagged

wordpress utf8 latin1


Versions (?)

Who likes this?

1 person have marked this snippet as a favorite

luman


Conversión de Latin1 a UTF8


 / Published in: MySQL
 

URL: http://rolandog.com

  1. /* ¡IMPORTANTE!
  2.  * Este es un tutorial para convertir la codificación de bases de datos de
  3.  * latin1 a utf8. MySQL anteriormente solo utilizaba codificación latin1, y una
  4.  * colación latin1_swedish_ci.
  5.  */
  6.  
  7. /* Algoritmo:
  8.  * Al convertir los campos a su valor en binario, se puede cambiar la
  9.  * codificación, sin tener que preocuparse por los caracteres especiales:
  10.  * CHAR -> BINARY
  11.  * VARCHAR -> VARBINARY
  12.  * TINYTEXT -> TINYBLOB
  13.  * TEXT -> BLOB
  14.  * MEDIUMTEXT -> MEDIUMBLOB
  15.  * LONGTEXT -> LONGBLOB
  16.  * Los siguientes queries nos ayudan en convertir a y regresar de binario.
  17. */
  18.  
  19. /* MyDb
  20.  * Se infiere que la base de datos se llama MyDb.
  21.  */
  22.  
  23. /* Correr en information_schema
  24.  * El código SQL de estos queries se debe correr en la base de datos llamada
  25.  * information_schema. Los queries generan código SQL que se debe correr en la
  26.  * base de datos 'MyDb'.
  27.  */
  28. USE information_schema;
  29.  
  30. /* I. Identificar binarios preexistentes
  31.  * Este SQL -- así como el siguiente paso -- es un paso de precaución; hay que
  32.  * anotar los campos que aparezcan aquí, para identificar cuáles campos ya eran
  33.  * de tipo binario. Si no aparecen campos, es motivo de alegría.
  34.  */
  35. 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%';
  36.  
  37. /* II. Identificar blobs preexistentes
  38.  * Este SQL también es un paso de precaución; hay que anotar los campos que
  39.  * aparezcan aquí. Aquí buscamos los campos de tipo blob. Si no aparecen
  40.  * campos, es motivo de alegría.
  41.  */
  42. 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%';
  43.  
  44. /* III. CHAR -> BINARY
  45.  * Conversión de cualquier tipo de Char a su correspondiente Binario.
  46.  */
  47. 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%';
  48.  
  49. /* IV. TEXT -> BLOB
  50.  * Conversión de cualquier tipo de Texto a su correspondiente Blob.
  51.  */
  52. 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%';
  53.  
  54. /* V. Convertir MyDb de latin1 a utf8
  55.  * Esto convierte y asigna una colación en Unicode a la base de datos. Pero aún
  56.  * falta considerar las tablas y los campos en particular.
  57.  */
  58. ALTER DATABASE MyDb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
  59.  
  60. /* VI. Convertir Tablas de MyDb de latin1 a utf8
  61.  * Este query es para cambiar la codificación de las tablas.
  62.  */
  63. SELECT CONCAT('ALTER TABLE ', table_name, ' DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;') FROM tables WHERE table_schema = 'MyDb';
  64.  
  65. /* VII. Convertir Campos de tipo Char de las Tablas de MyDb de latin1 a utf8
  66.  * Este query es para cambiar la codificación los chars de las tablas.
  67.  */
  68. 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%';
  69.  
  70. /* VIII. Convertir Campos de tipo Text de las Tablas de MyDb de latin1 a utf8
  71.  * Este query es para cambiar la codificación los textos de las tablas.
  72.  */
  73. 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%';
  74.  
  75. /* IX. BINARY -> CHAR
  76.  * Convierte los binarios a chars. Hay que manualmente eliminar queries de los
  77.  * resultados de el paso I.
  78.  */
  79. 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%';
  80.  
  81. /* X. BLOB -> TEXT
  82.  * Revierte los blobs a textos. Hay que manualmente eliminar queries de los
  83.  * resultados de el paso II.
  84.  */
  85. 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%';

Report this snippet  

You need to login to post a comment.