DataARTIGO

Preparando sua base de dados para o mundo

O assunto de hoje ainda não é comum no dia-a-dia da maioria dos DBAs brasileiros, mas a tendência é que isso mude bastante nos próximos anos. Vamos falar de bancos de dados com suporte para caracteres internacionais.

Aproveitando que o mundo não acabou, aceitei o convite do iMasters e começo agora a escrever esta coluna.

O assunto de hoje ainda não é comum no dia-a-dia da maioria dos DBAs brasileiros, mas a tendência é que isso mude bastante nos próximos anos. Vamos falar de bancos de dados com suporte para caracteres internacionais.

Nós costumamos pensar dentro do nosso universo de caracteres latinos, com vogais acentuadas e cedilhas, mas esquecemos que existem outros alfabetos completamente diferentes do nosso. Porém, num mundo globalizado em que  as aplicações podem rodar em qualquer parte do planeta, temos que nos preparar para essa nova realidade.

Pense numa aplicação que tem um campo COMENTARIO no qual o usuário pode escrever o que desejar sobre o produto e/ou serviço que comprou…. E que essa aplicação está sendo usada aqui no Brasil e na Coreia. Se você não pensou nisso antecipadamente, provavelmente vai ter problemas.

Recentemente, eu tive um problema igual a esse usando um banco de dados do DB2, que deveria aceitar qualquer caracter UNICODE. Para minha sorte, o DB2 é bem flexível quando se trata de controle de caracteres aceitos. Mesmo para um banco de dados já em produção, basta-me alterar uma variável de configuração do banco para que a base passe a aceitar caracteres internacionais.

As informações sobre localização e tipos de caracteres aceitos são definidas por cinco variáveis, apresentadas a seguir com uma breve descrição de cada uma:

  • Database territory : sigla do país onde está o banco de dados
  • Database code page : código do conjunto de caracteres suportados
  • Database code set : nome do conjunto de caracteres suportados
  • Database country/region code : código do país onde está o banco de dados
  • Database collating sequence : define regras de comparação de caracteres

Por default, ao criarmos um novo banco de dados no DB2 v10.1, ele já está preparado para receber caracteres internacionais (8-BIT UNICODE TRANSFORMATION FORMAT). Também por default, os dados são sensíveis a maiúsculas (case sensitive).

imagem 1

Em versões mais antigas do DB2, a configuração padrão era diferente, e o DBA era obrigado a alterar a configuração de suas bases para aceitar caracteres internacionais, usando o comando

db2set DB2CODEPAGE=1208

Uma vez concluída a configuração, a base está pronta para receber qualquer caractere do UTF-8.  Basta que você defina suas colunas usando o tipo de dados adequado.

Os tipos adequados do DB2 para suporte de caracteres UNICODE são GRAPHIC e VARGRAPHIC. Os tipos NCHAR e NVARCHAR usados no ORACLE, e SQL SERVER também são aceitos, apesar de eu não ter encontrado nenhuma documentação sobre o assunto.

Vejamos um exemplo. Considere a tabela MINHATAB definida abaixo.

db2 create table MINHATAB (COLUNA VARGRAPHIC(5))

Para inserir um ideograma chinês nessa tabela, basta usar uma declaração SQL simples.  (Não pergunte o que representa o ideograma, eu apenas achei isso na internet).

db2 "INSERT INTO MINHATAB VALUES ('你好')"

Igualmente, é possível listar os valores armazenados na tabela MINHATAB.

imagem 2

Por hoje é só. Para informações sobre linguagens específicas, consulte os códigos de páginas suportados pelo DB2 (clique aqui). E, sobre os tipos de dados, verifique a página oficial neste link.

 

Consultor Sênior na Microsoft, na área de Data Insights para América Latina. Especialista em bancos de dados, é colunista em diversos portais de TI do Brasil e do exterior, com mais de 100 artigos técnicos publicados. É também co-produtor do DatabaseCast, primeiro podcast brasileiro sobre bancos de dados.

Ver perfil