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

Caracteres especiales en PHP/MySQL

Me gustaría brindar más detalles sobre la solución propuesta por vartec que es (dependiendo de su instalación de MySQL) la solución más correcta a su problema. En primer lugar, el problema del conjunto de caracteres / codificación en MySQL es un tema algo complejo que se trata ampliamente en el manual de MySQL Capítulo 9.1 "Compatibilidad con conjuntos de caracteres" . En su caso especialmente 9.1.4. "Combinaciones y conjuntos de caracteres de conexión" serán los más relevantes.

Para abreviar:MySQL debe saber qué conjunto de caracteres / codificación espera su aplicación cliente (hablando desde la perspectiva de la base de datos que es su script PHP) ya que transcodificará todos los datos de cadena del conjunto de caracteres / codificación internos definidos en el servidor-, nivel de base de datos, tabla o columna en el juego de caracteres / codificación de conexión. Está usando UTF-8 en el lado del cliente, por lo que debe decirle a MySQL que usa UTF-8. Esto se hace con el comando MySQL SET NAMES 'utf8' que debe enviarse como primera consulta al abrir una conexión. Dependiendo de su instalación y de la biblioteca cliente de MySQL que use en el script PHP, esto se puede hacer automáticamente en cada conexión.

Si usa PDO, solo es cuestión de establecer un parámetro de configuración

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Usar mysqli para cambiar el conjunto de caracteres / codificación del cliente es aún más simple:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Espero que eso ayude a que todo sea más comprensible.