Aquí hay una respuesta dos en uno.
Puede establecer esto en el DSN o como MYSQL_ATTR_INIT_COMMAND (opciones de conexión).
DSN es mejor, creo.
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Si especifica UTF-8
está trabajando con la intercalación predeterminada de utf8_general_ci
, a menos que su tabla o campo de base de datos use algo diferente.
Si desea que todo el servidor responda con esta intercalación predeterminada, use las directivas de configuración:
collation_server=utf8_unicode_ci
character_set_server=utf8
Así que no tienes que especificarlo en la conexión cada vez.
Las intercalaciones afectan la clasificación de los caracteres y se establecen en la tabla y los campos de su base de datos. Estas configuraciones se respetan al consultar la tabla. Asegúrese de que estén configurados. Use nombres UTF-8 con la intercalación establecida en su base de datos.
Su comentario:
Citemos del Manual de MySQL para probar esto:
Mi respuesta:Funciona implícitamente, a menos que sus tablas cambien esto explícitamente.
Pregunta del comentario:
Ejemplo:la intercalación de columnas anula la intercalación de tablas
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
Si se especifican tanto CHARACTER SET X como COLLATE Y en una columna, se utilizan el juego de caracteres X y la intercalación Y. La columna tiene un juego de caracteres utf8
y colación utf8_unicode_ci
como se especifica en la columna de la tabla, mientras que la tabla está en latin1 + latin1_bin.
Ejemplo:en general se utiliza la intercalación de tablas
Si la intercalación no se especifica explícitamente en una columna/campo, se usa la intercalación de la tabla:
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1 tiene intercalación latin1_bin.
Si quieres utf8_unicode_ci
intercalación, configúrelo en sus tablas en general o en las columnas/campos.