2010-10-19 46 views
7

He cometido un error al diseñar mi base de datos de aplicaciones hace varios años y la configuración de intercalación de mis tablas y campos de tablas está mezclada. Algunos de ellos son utf8_general_ci y algunos de ellos son utf8_unicode_ci.Convertir tablas y campos utf8_general_ci en utf8_unicode_ci

Esto causa problemas al unir tablas con intercalaciones diferentes. Ahora, estoy planeando cambiar la configuración de intercalación y hacer que sean iguales: utf8_unicode_ci. Voy a ejecutar estas dos consultas SQL en todas mis tablas.

ALTER TABLE `table1` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; 
ALTER TABLE `table1` CHANGE `Action` `Action` VARCHAR(250) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL; 

Mi pregunta es, ¿ejecutando estas dos consultas SQL se rompen todos los valores de campo, especialmente los que contienen caracteres acentuados? ¿O es seguro ejecutar estas dos consultas?

Esperamos su respuesta.

Gracias por sus respuestas!

Respuesta

5

consulte doc mysql que habla de cambiar el juego de caracteres y la colación

http://dev.mysql.com/doc/refman/5.1/en/charset-column.html

Su diciendo que - "Si usa ALTER TABLE para convertir una columna de un conjunto de caracteres a otro, MySQL intenta asignar los valores de los datos, pero si los conjuntos de caracteres son incompatibles, puede haber pérdida de datos ".

--Colas

+0

Gracias por su amable respuesta. – TamTam

+1

Estas dos codificaciones de caracteres son compatibles, sin embargo. De hecho, es exactamente la misma codificación de caracteres, solo una forma diferente de compararlos al ordenar. Cualquier índice en las columnas probablemente necesite ser reconstruido, eso es todo. – thomasrutter

5

La intercalación solo afecta cómo se comparan las cadenas dentro de un campo, no cómo se almacenan. En cuanto te quedas con la codificación utf8, estás a salvo.

+1

yup, esto es correcto. Existen diferencias sutiles de clasificación y comparación como german 'ß' =' ss' y otros, pero no se modificarán los datos. Consulte http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html para obtener más información –

+1

Chicos, consulte esto (http://dev.mysql.com/doc/refman/ 5.1/es/charset-column.html) como Koteswasa menciona a continuación. Gracias por tu tiempo. – TamTam

+0

Estoy parado. Aún dentro de la misma codificación, la intercalación de conmutación es segura. – Mchl

Cuestiones relacionadas