Eu tinha isso anteriormente na minha conexão normal mysql_ *:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Preciso disso para a DOP? E onde devo tê-lo?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Respostas:
Você o encontrará na cadeia de conexão como:
No entanto, antes do PHP 5.3.6, a opção charset era ignorada. Se você estiver executando uma versão mais antiga do PHP, faça o seguinte:
fonte
Antes do PHP 5.3.6, a opção charset era ignorada. Se você estiver executando uma versão mais antiga do PHP, faça o seguinte:
fonte
Esta é provavelmente a maneira mais elegante de fazer isso.
À direita na chamada do construtor PDO, mas evitando a opção de charset de buggy (como mencionado acima):
Funciona muito bem para mim.
fonte
array(1002 => 'SET NAMES utf8',...)
.charset=utf8
na string dsn funciona! Eu estava tentando descobrir o problema em groups.google.com/d/msg/auraphp/syMS26Rz-q8/9laQr9tR4EoJPara completar, existem três maneiras de definir a codificação ao conectar-se ao MySQL a partir do PDO e quais estão disponíveis dependem da sua versão do PHP. A ordem de preferência seria:
charset
parâmetro na sequência DSNSET NAMES utf8
comPDO::MYSQL_ATTR_INIT_COMMAND
opção de conexãoSET NAMES utf8
manualmenteEste código de exemplo implementa todos os três:
Realizar todos os três provavelmente é um exagero (a menos que você esteja escrevendo uma aula que planeja distribuir ou reutilizar).
fonte
Eu só quero acrescentar que você precisa garantir que seu banco de dados seja criado com COLLATE utf8_general_ci ou qualquer outro agrupamento que você deseja usar. Caso contrário, você pode acabar com outro que não o pretendido.
No phpmyadmin, você pode ver o agrupamento clicando no seu banco de dados e escolhendo operações. Se você tentar criar tabelas com outro agrupamento que não o seu banco de dados, suas tabelas acabarão com o agrupamento de banco de dados de qualquer maneira.
Portanto, verifique se o agrupamento do seu banco de dados está correto antes de criar tabelas. Espero que isso salve alguém algumas horas lol
fonte
Eu acho que você precisa de uma consulta adicional porque a opção charset no DSN é realmente ignorada. veja o link postado no comentário da outra resposta.
Examinando como o Drupal 7 está fazendo isso em http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__construct/7 :
fonte
fonte
Eu testei esse código e
fonte
fonte
$ con = novo PDO ("mysql: host = $ dbhost; dbname = $ banco de dados; charset = $ encoding ", "$ dbuser", "$ dbpassword");
fonte