El artículo http://mysqldump.azundris.com/archives/60-Handling-character-sets.html analiza esto detenidamente y también muestra lo que sucederá.
Tenga en cuenta que está mezclando un CONJUNTO DE CARACTERES (en realidad una codificación) con una COLECCIÓN.
Un conjunto de caracteres define la representación física de una cadena en bytes en el disco. Puede hacer que esto sea visible, usando la función HEX(), por ejemplo SELECT HEX(str) FROM t WHERE id = 1
para ver cómo MySQL almacena los bytes de su cadena. Lo que MySQL le entrega puede ser diferente, dependiendo del conjunto de caracteres de su conexión, definido con SET NAMES ....
.
Una clasificación es un criterio de ordenación. Depende del conjunto de caracteres. Por ejemplo, sus datos pueden estar en el conjunto de caracteres latin1, pero pueden ordenarse según cualquiera de los dos ordenamientos alemanes latin1_german1_ci o latin1_german2_ci. Dependiendo de su elección, los diéresis como ö se ordenarán como oe o como o.
Cuando está cambiando un conjunto de caracteres, los datos en su tabla deben ser reescritos. MySQL leerá todos los datos y todos los índices en la tabla, hará una copia oculta de la tabla que temporalmente ocupa espacio en disco, luego moverá la tabla anterior a una ubicación oculta, moverá la tabla oculta a su lugar y luego eliminará los datos anteriores, liberando hasta el espacio en disco. Durante un tiempo intermedio, necesitará dos veces más espacio de almacenamiento para eso.
Cuando está cambiando una intercalación, el orden de clasificación de los datos cambia pero no los datos en sí. Si la columna que está modificando no forma parte de un índice, no es necesario hacer nada aparte de volver a escribir el archivo frm, y las versiones suficientemente recientes de MySQL no deberían hacer más.
Cuando está cambiando una intercalación de una columna que forma parte de un índice, el índice debe reescribirse, ya que un índice es un extracto ordenado de una tabla. Esto volverá a activar la lógica de copia de la tabla ALTER TABLE descrita anteriormente.
MySQL intenta preservar los datos al hacer esto: Siempre que los datos que tenga se puedan representar en el juego de caracteres objetivo, la conversión no tendrá pérdidas. Las advertencias se imprimirán si hay truncamiento de datos en curso, y los datos que no se pueden representar en el juego de caracteres objetivo se reemplazarán por?