Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Caracteres especiais em PHP/MySQL


Gostaria apenas de fornecer mais alguns detalhes sobre a solução proposta por vartec que é (dependendo da sua instalação do MySQL) a solução mais correta para o seu problema. Em primeiro lugar, a questão do conjunto de caracteres / codificação no MySQL é um assunto um tanto complexo que é amplamente coberto no manual do MySQL Capítulo 9.1 "Suporte a conjunto de caracteres" . No seu caso, especialmente 9.1.4. "Conjuntos de caracteres de conexão e agrupamentos" será o mais relevante.

Para resumir:o MySQL deve saber qual conjunto de caracteres / codificação seu aplicativo cliente (falando do banco de dados persoective que é seu script PHP) está esperando, pois ele transcodificará todos os dados de string do conjunto / codificação de caracteres internos definidos em server-, nível de banco de dados, tabela ou coluna no conjunto/codificação de caracteres de conexão. Você está usando UTF-8 no lado do cliente, então deve informar ao MySQL que você usa UTF-8. Isso é feito pelo comando MySQL SET NAMES 'utf8' que deve ser enviado como a primeira consulta ao abrir uma conexão. Dependendo da sua instalação e da biblioteca cliente MySQL que você usa no script PHP, isso pode ser feito automaticamente em cada conexão.

Se você usa PDO é apenas uma questão de definir um parâmetro de configuração
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Usar o mysqli para alterar o conjunto/codificação de caracteres do cliente é ainda mais simples:
$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Espero que isso ajude a tornar tudo mais compreensível.