PHP PDO: juego de caracteres, nombres de conjuntos?

Resuelto Karem asked hace 54 años • 10 respuestas

Tenía esto anteriormente en mi conexión mysql_* normal:

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));
Karem avatar Jan 01 '70 08:01 Karem
Aceptado

Lo tendrás en tu cadena de conexión como:

"mysql:host=$host;dbname=$db;charset=utf8mb4"

SIN EMBARGO, antes de PHP 5.3.6, se ignoraba la opción del juego de caracteres. Si estás ejecutando una versión anterior de PHP, debes hacerlo así:

$dbh = new PDO("mysql:host=$host;dbname=$db",  $user, $password);
$dbh->exec("set names utf8mb4");
Cobra_Fast avatar Dec 05 '2010 21:12 Cobra_Fast

Antes de PHP 5.3.6, se ignoraba la opción del juego de caracteres. Si estás ejecutando una versión anterior de PHP, debes hacerlo así:

<?php

    $dbh = new PDO("mysql:$connstr",  $user, $password);

    $dbh -> exec("set names utf8");

?>
9nix00 avatar Mar 29 '2011 05:03 9nix00

Esta es probablemente la forma más elegante de hacerlo.
Justo en la llamada al constructor PDO, pero evitando la opción de juego de caracteres con errores (como se mencionó anteriormente):

$connect = new PDO(
  "mysql:host=$host;dbname=$db", 
  $user, 
  $pass, 
  array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  )
);

Funciona muy bien para mí.

Jpsy avatar Sep 06 '2011 19:09 Jpsy