sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo lidiar con acentos y caracteres extraños en una base de datos?

Colección afecta solo a la clasificación de texto, no tiene efecto en el conjunto de caracteres real de los datos almacenados.

Recomendaría esta configuración:

  1. Establecer el conjunto de caracteres para toda la base de datos solo, por lo que no tiene que configurarlo para cada tabla por separado. El juego de caracteres se hereda de DB a tablas a columnas. Utilice utf8 como el juego de caracteres.

  2. Establecer el conjunto de caracteres para la conexión DB . Ejecute estas consultas después de conectarse a la base de datos:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. Establecer el conjunto de caracteres para la página , utilizando el encabezado HTTP y/o la metaetiqueta HTML. Uno de estos es suficiente. Utilice utf-8 como el charset .

Esto debería ser suficiente.

Si desea tener una clasificación adecuada de las cadenas en español, configure collation para toda la base de datos. utf8_spanish_ci debería funcionar (ci significa Insensible a mayúsculas y minúsculas ). Sin la intercalación adecuada, los caracteres en español acentuados se ordenarían siempre en último lugar.

Nota :es posible que el conjunto de datos de caracteres que ya tiene en una tabla esté roto, porque la configuración de su conjunto de caracteres era incorrecta anteriormente. Primero debe verificarlo usando algún cliente DB para excluir este caso. Si está roto, simplemente vuelva a insertar sus datos con la configuración de juego de caracteres correcta.

¿Cómo conjunto de caracteres trabajar en una base de datos

  • objetos tener un conjunto de caracteres atributo, que se puede configurar explícitamente o se hereda (servidor> base de datos> tabla> columna), por lo que la mejor opción es configurarlo para toda la base de datos

  • conexión de cliente también tiene un juego de caracteres atributo y le dice a la base de datos en qué codificación está enviando los datos

Si los conjuntos de caracteres de la conexión del cliente y del objeto de destino son diferentes, los datos que está enviando a la base de datos se convierten automáticamente del conjunto de caracteres de la conexión al conjunto de caracteres del objeto.

Entonces, si tiene, por ejemplo, los datos en utf8 , pero conexión de cliente establecido en latin1 , la base de datos dividirá los datos, porque intentará convertir utf8 como si fuera latin1 .