Tenía esto anteriormente en mi conexión normal mysql_ *:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
¿Lo necesito para la DOP? ¿Y dónde debería tenerlo?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Respuestas:
Lo tendrás en tu cadena de conexión como:
SIN EMBARGO, antes de PHP 5.3.6, la opción charset fue ignorada. Si está ejecutando una versión anterior de PHP, debe hacerlo así:
fuente
Antes de PHP 5.3.6, se ignoraba la opción charset. Si está ejecutando una versión anterior de PHP, debe hacerlo así:
fuente
Esta es probablemente la forma más elegante de hacerlo.
Justo en la llamada del constructor PDO, pero evitando la opción de juego de caracteres con errores (como se mencionó anteriormente):
Funciona muy bien para mi.
fuente
array(1002 => 'SET NAMES utf8',...)
.charset=utf8
la cadena dsn funciona! Estaba tratando de resolver el problema en groups.google.com/d/msg/auraphp/syMS26Rz-q8/9laQr9tR4EoJPara completar, en realidad hay tres formas de configurar la codificación cuando se conecta a MySQL desde PDO y cuáles están disponibles dependen de su versión de PHP. El orden de preferencia sería:
charset
parámetro en la cadena DSNSET NAMES utf8
conPDO::MYSQL_ATTR_INIT_COMMAND
opción de conexiónSET NAMES utf8
manualmenteEste código de ejemplo implementa los tres:
Hacer las tres cosas es probablemente exagerado (a menos que esté escribiendo una clase que planea distribuir o reutilizar).
fuente
Solo quiero agregar que debe asegurarse de que su base de datos se cree con COLLATE utf8_general_ci o cualquier colación que desee usar, de lo contrario, podría terminar con otra que no sea la prevista.
En phpmyadmin puede ver la clasificación haciendo clic en su base de datos y seleccionando operaciones. Si intenta crear tablas con una clasificación diferente a su base de datos, sus tablas terminarán con la clasificación de la base de datos de todos modos.
Así que asegúrese de que la clasificación de su base de datos sea correcta antes de crear tablas. Espero que esto ahorre a alguien unas horas jajaja
fuente
Creo que necesita una consulta adicional porque la opción de juego de caracteres en el DSN se ignora realmente. ver enlace publicado en el comentario de la otra respuesta.
Mirando cómo Drupal 7 lo está haciendo en http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__construct/7 :
fuente
fuente
fuente
Pruebo este código y
fuente
$ con = new PDO ("mysql: host = $ dbhost; dbname = $ database; charset = $ encoding ", "$ dbuser", "$ dbpassword");
fuente