Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Comprimento real de uma String, conforme visto pelo Oracle


Você pode, como outros mostraram, converter a string Java em uma matriz de bytes usando o conjunto de caracteres do banco de dados Oracle e obter o comprimento em bytes a partir disso. Isso depende, no entanto, de saber qual é o conjunto de caracteres do seu banco de dados - bancos de dados diferentes terão conjuntos de caracteres diferentes, o que resultará em comprimentos de bytes diferentes para a mesma string em conjuntos de caracteres diferentes.

Supondo que seu banco de dados esteja usando um conjunto de caracteres de largura variável como UTF-8 (NLS_CHARACTERSET de AL32UTF8), você também pode declarar colunas no Oracle com base no comprimento do caractere em vez do comprimento do byte. Isso pode simplificar seu código, pois você pode apenas verificar o comprimento de caracteres de sua string. Também simplifica a comunicação para os usuários. Geralmenteédifícil para os usuários entender porque um campo pode às vezes armazenar 5 caracteres enquanto outras vezes ele rejeita uma seqüência de 2 caracteres dependendo dos caracteres que fazem parte da seqüência (1 caractere no conjunto de caracteres UTF-8 pode exigir até 3 bytes de armazenamento).

Por padrão, quando você declara uma coluna
CREATE TABLE foo (
  col_name VARCHAR2(5)
);

que diz ao Oracle para permitir até 5 bytes de dados. Se você deseja permitir 5 caracteres de dados, independentemente do número de bytes, no entanto, você pode usar a semântica de comprimento de caractere
CREATE TABLE foo (
  col_name VARCHAR2(5 CHAR)
);

Supondo que você queira fazer isso para todas as suas tabelas enquanto executa seu DDL, você também pode definir nls_length_semantics no nível da sessão antes de executar seu DDL
ALTER SESSION SET nls_length_semantics = CHAR;

CREATE TABLE foo (
  col_name VARCHAR2(5)
);

cria uma tabela com uma coluna que permite até 5 caracteres de dados.