¿Cómo puedo convertir todo el conjunto de caracteres de la base de datos MySQL a UTF-8 y la clasificación a UTF-8?
mysql
character-encoding
Decano
fuente
fuente
utf8_unicode_ci
, noutf8_general_ci
.utf8mb4
más queutf8
tanutf8
sólo es compatible con el plano multilingüe básico en contraposición a toda la gama. Requiere MySQL 5.5.3 o superior.utf8mb4
, también tendrás que cambiar la clasificación autf8mb4_unicode_ci
utf8mb4_unicode_520_ci
, o lo que sea, es la última versión disponible.Respuestas:
Usa los comandos
ALTER DATABASE
yALTER TABLE
.O si todavía está en MySQL 5.5.2 o anterior que no era compatible con UTF-8 de 4 bytes, use en
utf8
lugar deutf8mb4
:fuente
CONVERT TO
técnica supone que el texto se almacenó correctamente en algún otro conjunto de caracteres (p. Ej., Latin1), y no se desglosó (como los bytes UTF-8 metidos en la columna latin1 sin conversión a latin1).¡Hacer una copia de seguridad!
Luego debe establecer los conjuntos de caracteres predeterminados en la base de datos. Esto no convierte las tablas existentes, solo establece el valor predeterminado para las tablas recién creadas.
Luego, deberá convertir el conjunto de caracteres en todas las tablas existentes y sus columnas. Esto supone que sus datos actuales están realmente en el conjunto de caracteres actual. Si sus columnas están configuradas en un conjunto de caracteres pero sus datos realmente están almacenados en otro, deberá verificar manual de MySQL sobre cómo manejar esto.
fuente
utf8_general_ci
ya no se recomienda la mejor práctica. Desde MySQL 5.5.3 debe usar enutf8mb4
lugar deutf8
. Ambos se refieren a la codificación UTF-8, pero el anteriorutf8
tenía una limitación específica de MySQL que impedía el uso de los caracteres enumerados anteriormente0xFFFD
.En la línea de comandos
Si eres uno de los comandos de la línea de comandos, puedes hacerlo rápidamente. Simplemente complete "dbname": D
One-liner para copiar / pegar simple
fuente
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DB="dbname"
DB="db_name"; ( echo 'ALTER DATABASE
'"$ DB"' `CHARACTER SET utf8 COLLATE utf8_general_ci; '; mysql --uuser -ppassword -hhost "$ DB" -e "MOSTRAR TABLAS" --batch --skip-column-names | xargs -I {} echo 'SET foreign_key_checks = 0; ALTERAR TABLA'{}'
CONVERTIR AL CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci; ' ) | mysql -uuser -ppassword -hhost "$ DB" `Puede crear el sql para actualizar todas las tablas con:
Capture la salida y ejecútela.
La respuesta anterior de Arnold Daniels es más elegante.
fuente
WHERE TABLE_SCHEMA=webdb_playground
le dio el error de columna desconocido, peroWHERE TABLE_SCHEMA="webdb_playground"
habría sido exitoso. Algo para probar en caso de que alguien más se encuentre con eso.Antes de continuar, asegúrese de que: ¡Ha completado una copia de seguridad completa de la base de datos!
Paso 1: cambios en el nivel de la base de datos
Identificar la recopilación y el juego de caracteres de su base de datos
Arreglando la colación para la base de datos
Paso 2: cambios en el nivel de la tabla
Identificación de tablas de bases de datos con el conjunto de caracteres o la clasificación incorrectos
Ajuste de la clasificación y el conjunto de caracteres de las columnas de la tabla
Capture la salida sql superior y ejecútela. (como seguir)
consulte: https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL+Database
fuente
Use HeidiSQL . Es gratis y una muy buena herramienta de db.
Desde el menú de herramientas, ingrese al editor de tabla masiva
Seleccione la base de datos completa o elija tablas para convertir,
Ejecutar
Esto convierte la base de datos completa de latín a utf8 en solo unos segundos.
Funciona de maravilla :)
HeidiSQL se conecta de forma predeterminada como utf8, por lo que cualquier carácter especial ahora debe verse como el carácter (æ ø å) y no como codificado al inspeccionar los datos de la tabla.
La verdadera trampa al pasar de latín a utf8 es asegurarse de que pdo se conecta con utf8 charset. Si no, obtendrá datos de basura insertados en la tabla utf8 y signos de interrogación en todo el lugar de su página web, haciéndole pensar que los datos de la tabla no son utf8 ...
fuente
Inspirado por @sdfor comment, aquí hay un script bash que hace el trabajo
fuente
En caso de que los datos no estén en el mismo juego de caracteres, puede considerar este fragmento de http://dev.mysql.com/doc/refman/5.0/en/charset-conversion.html
Aquí hay un ejemplo:
Asegúrese de elegir la clasificación correcta, o podría obtener conflictos clave únicos. por ejemplo, Éleanore y Eleanore podrían considerarse lo mismo en algunas colaciones.
Aparte:
Tuve una situación en la que ciertos caracteres "se rompieron" en los correos electrónicos a pesar de que estaban almacenados como UTF-8 en la base de datos. Si está enviando correos electrónicos utilizando datos utf8, es posible que también desee convertir sus correos electrónicos para enviarlos en UTF8.
En PHPMailer, solo actualice esta línea:
public $CharSet = 'utf-8';
fuente
Para las bases de datos que tienen una gran cantidad de tablas, puede usar un script php simple para actualizar el conjunto de caracteres de la base de datos y todas las tablas usando lo siguiente:
fuente
fuente
fuente
La forma más segura es modificar las columnas primero a un tipo binario y luego modificarlo de nuevo a su tipo usando el juego de caracteres deseado.
Cada tipo de columna tiene su respectivo tipo binario, como sigue:
P.ej.:
Lo intenté en varias tablas latin1 y mantuvo todos los diacríticos.
Puede extraer esta consulta para todas las columnas haciendo esto:
Después de hacer esto en todas sus columnas, lo hace en todas las tablas:
Para generar esta consulta para toda su tabla, use la siguiente consulta:
Y ahora que modificó todas sus columnas y tablas, haga lo mismo en la base de datos:
fuente
Si no puede convertir sus tablas o si su tabla siempre está configurada con un conjunto de caracteres que no sea utf8, pero desea utf8, su mejor opción podría ser borrarla y comenzar de nuevo y especificar explícitamente:
fuente
La única solución que funcionó para mí: http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8
Convertir una base de datos que contiene tablas
fuente
alter table table_name charset = 'utf8';
Esta es una consulta simple que pude usar para mi caso, puede cambiar el nombre_tabla según sus requisitos.
fuente
Para cambiar la codificación del juego de caracteres a UTF-8 para la base de datos en sí, escriba el siguiente comando en el indicador mysql>. Reemplace DBNAME con el nombre de la base de datos:
fuente
También puede usar la herramienta de base de datos Navicat, que lo hace más fácil.
Haga clic con el botón derecho en su base de datos y seleccione Propiedades y cambio de base de datos como desee en el menú desplegable
fuente
Solución de línea de comandos y excluir vistas
Simplemente estoy completando la respuesta de @ Jasny para otras personas como
@Brian
yo que tenemos puntos de vista en nuestra base de datos.Si tiene un error como este:
Es porque probablemente tenga vistas y necesite excluirlas. Pero al intentar excluirlos, MySQL devuelve 2 columnas en lugar de 1.
Entonces tenemos que adaptar el comando de Jasny
awk
para extraer solo la primera columna que contiene el nombre de la tabla.One-liner para copiar / pegar simple
fuente
Para cambiar la codificación del juego de caracteres a UTF-8, siga los pasos simples en PHPMyAdmin
Seleccione su base de datos
Ir a operaciones
fuente