O metadados é o dado sobre o dado. Qualquer coisa que descreva os
bancos de dados, como o opsto de ser o conteúdo do banco de
dados, é metadados. Assim nomes de colunas, banco de dados,
usuários, versões e a maioria dos resultados strings de
SHOW
, são metadados.
Todos os metadados devem estar no mesmo conjunto de caracteres.
(Senão, SHOW
não funcionaria corretamente
devido aos diferentes registros na mesma coluna estarem em
conjunto de caracteres diferentes). Por outro lado, metadados
devem incluir todos os caracteres em todas as linguagens (senào
os usuários não poderiam nomear as colunas e tabelas na suas
próprias linguagens). Para permitir ambos os objetivos, o MySQL
armazena metadados em um conjunto de caracteres Unicode, chamado
UTF8. Isto não causa qualquer rompimento se você nunca usar
caracteres acentuados. Mas se você fizer, deverá estar ciente
que o metadado está em UTF8.
Isto significa que funções USER()
(e seus
sinônimos), SESSION_USER()
and
SYSTEM_USER()
),
CURRENT_USER()
, e VERSION()
terá o conjunto de caracteres UTF8 por padrão.
Isto NÃO significa que o cabeçalho das colunas e os resultados
da função DESCRIBE
estarão no conjunto de
caracteres UTF8 por padrão. (Quando você fizer SELECT
column1 FROM t
o nome column1
será
retornado do servidor para o cliente no conjunto de caracteres do
cliente como determinado pela instrução SET
NAMES
.)
Se você quizer que o servidor passe o resultado de volta em um
conjunto de caracteres não-UTF8, então use SET
CHARACTER SET
para forçar o servidor a converter (see
Secção 9.3.6, “Conjunto de Caracteres e Collation de Conexão”), ou configurar o cliente
para fazer a a conversão, mas esta opção não estará
disponível para muitos clientes até no final no ciclo do produto
MySQL 4.x.
Se você está apenas usando, por exemplo, a função
USER()
para comparação ou atribuição dentro
de uma única instrução ... não preocupe. O MySQL fará alguma
conversão automática para você.
SELECT * FROM Table1 WHERE USER() = latin1_column;
Isto funcionará, porque o conteúdo de
latin1_column
é convertido automaticamente
para UTF8 antes da comparação.
INSERT INTO Table1 (latin1_column) SELECT USER();
Isto funcionará, porque o contéudo de USER()
é convertido automaticamente para latin1
antes
da atribuição. A conversão automática ainda não está
totalmente implementada, mas deve funcionar corretamente em uma
versão posterior.
Embora a conversão automática não esteja no padrão SQL, o documento do padrão SQL diz que todo conjunto de caracteres é (em termos de caracteres suportados) um ``subconjunto'' do Unicode. Desde que isto seja um princípio bem conhecido que ``o que aplica a um superconjunto pode ser aplicado a um subconjunto'', acreditamos que uma collation para Unicode pode ser aplicado para comparações com strings não -Unicode.
NATA DA VERSÃO 4.1.1: Os arquivos errmsg.txt
estarão todos em UTF8 depois deste ponto. Conversão o conjunto
de caracteres do clientes serão automáticos, como para
metadados. Também: Podemos alterar o comportamento padrão para
passar de volta o metadado do resultado em um futuro próximo.
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.