Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como especificar o agrupamento com PDO sem SET NAMES?


Aqui está uma resposta dois em um.

Você pode definir isso no DSN ou como MYSQL_ATTR_INIT_COMMAND (opções de conexão).

DSN é melhor, eu acho.
$connect = new PDO(
  "mysql:host=$host;dbname=$db;charset=utf8", 
  $user, 
  $pass, 
  array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  )
); 

Se você especificar UTF-8 você está trabalhando com o agrupamento padrão de utf8_general_ci , a menos que sua tabela ou campo db use algo diferente.

Se você quiser que todo o servidor responda com esse agrupamento padrão, use as diretivas de configuração:
collation_server=utf8_unicode_ci 
character_set_server=utf8

Portanto, você não precisa especificá-lo na conexão sempre.

As ordenações afetam a ordenação dos caracteres e são definidas na tabela e campos em seu banco de dados. Essas configurações são respeitadas, ao consultar a tabela. Certifique-se de que eles estejam definidos. Use nomes UTF-8 com o agrupamento definido em seu banco de dados.

Seu comentário:

Vamos citar o Manual MySQL para provar isso:

Minha resposta:Funciona implicitamente, a menos que suas tabelas alterem isso explicitamente.

Pergunta do comentário:

Exemplo:o agrupamento de colunas substitui o agrupamento de tabelas
CREATE TABLE t1
(
    col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;

Se CHARACTER SET X e COLLATE Y forem especificados em uma coluna, o conjunto de caracteres X e o agrupamento Y serão usados. A coluna tem um conjunto de caracteres utf8 e agrupamento utf8_unicode_ci conforme especificado na coluna da tabela, enquanto a tabela está em latin1 + latin1_bin.

Exemplo:em geral, o agrupamento de tabelas é usado

Se a ordenação não for especificada explicitamente em uma coluna/campo, a ordenação da tabela será usada:
CREATE TABLE t1
(
    col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;

col1 tem agrupamento latino1_bin.

Se você quiser utf8_unicode_ci agrupamento, defina-o para suas tabelas em geral ou para as colunas/campos.