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
cp1251
diz 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 mysql
, 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 mysql
, 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 mysql
:
[mysql] default-character-set-name=character_set_name
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.