sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo especificar la intercalación con PDO sin SET NAMES?

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.