Conjunto de Caracteres e Collation de Conexão


Toda conexão tem o seu conjunto de caracteres e collation, que não podem ser nulos. Esistem atualmente dois conjuntos de caracteres de conexão, que chamamos connection/literals e connection/results quando é necessário distingui-los.

Considere o que é uma conexão: é o que você faz quando conecta ao servidor. O cliente envia instruções SQL, como consultas, pela conexão com o sevidor. O servidor envia respostas, como resultados, pela conexão de volta para o cliente. Isto leva a diversas questões, tal como: (a) em qual conjunto de caracteres está uma consulta quando ela deixa o cliente? (b) em qual conjunto de caracteres o servidor deve traduzir uma consulta após recebê-la? (c) para qual conjunto de caracteres o servidor deve traduzir antes de enviar o resultado ou mensagem de erros de volta para o cliente? Você pode fazer um ajuste fino das configurações para isto, ou você pode depender dos padrões (neste caso, você pode ignorar esta seção).

Existem suas instruções que afetam o conjunto de caracteres da conexão:

SET NAMES character_set_name SET CHARACTER SET character_set_name

SET NAMES indica o que está na instrução SQL que o cliente envia. Assim, SET NAMES cp1251diz ao servidor que futuras mensagens vindas do cliente estarão no conjunto de caracteres cp1251 e o servidor está livre para traduzir para seu próprio conjunto de caracteres, se apropriado.

SET CHARACTER SET indica o que está na instrução SQL que o cliente envia, e também o que está no resultado que o servidor envia de volta para o cliente. Assim, SET CHARACTER SET inclui SET NAMES, e também especifica qual conjunto de caracteres o valor da coluna terá se, por exempo, você usar uma instrução SELECT.

EXEMPLO: Suponha que column1 é definido como CHAR(5) CHARACTER SET latin2. Se você não utilizar SET CHARACTER SET, então para SELECT column1 FROM t o servidor enviará de volta todos os valores para column1 usando o conjunto de caracteres latin2. Se por outro lado você usar SET CHARACTER SET latin1 então o servidor, antes de enviar de volta, converterá os valores latin2 para latin1. Tal conversão é lenta e poder ter perdas.

Quando você executa SET NAMES ou SET CHARACTER SET, você também está alterando a collation da conexão. No entanto a collation da conexão existe apenas para consistência. Normalmente o seu valor não importa.

Com o cliente MariaDB, não é necessário executar SET NAMES todas as vezes que você inicá-lo. Você pode adicionar a opção --default-character-set-name a sua linha de instrução do MariaDB, ou em seu arquivo de opção. Por exemplo, a seguinte configuração do arquivo de opção irá alterar o conjunto de caracteres da conexão cada vez que você executar MariaDB:

Retornar