Pergunta

No Oracle, qual é a diferença entre:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

e

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)
Foi útil?

Solução

Vamos assumir o conjunto de caracteres de banco de dados é UTF-8, que é a configuração recomendada nas versões recentes do Oracle. Neste caso, alguns caracteres tomar mais de 1 byte para armazenar no banco de dados.

Se você definir o campo como VARCHAR2(11 BYTE), a Oracle pode usar até 11 bytes de armazenamento, mas você não pode realmente ser capaz de armazenar 11 caracteres no campo, porque alguns deles levar mais de um byte para armazenar, por exemplo, caracteres não-ingleses.

Ao definir o campo como VARCHAR2(11 CHAR) você diga a Oracle pode usar o espaço suficiente para armazenar 11 caracteres, não importa quantos bytes é preciso para armazenar cada um. Um único caractere pode exigir até 4 bytes.

Outras dicas

Um tem exatamente o espaço para 11 bytes, a outra para exatamente 11 caracteres. Alguns conjuntos de caracteres, tais como variantes de Unicode pode utilizar mais do que um byte por carvão animal, por conseguinte, o campo 11 bytes pode ter espaço para menos de 11 caracteres, dependendo da codificação.

Veja também http://www.joelonsoftware.com/articles/Unicode.html

Dependendo da configuração do sistema, o tamanho do CHAR mensurada em bytes pode variar. Em seus exemplos:

  1. Limites campo para 11 BYTE
  2. Limites campo para 11 CHAR acters


Conclusão:. 1 CHAR não é igual a 1 BYTE

Eu não tenho certeza porque eu não sou um usuário Oracle, mas eu supor que as mentiras de diferença quando você usa conjuntos de caracteres multi-byte como Unicode (UTF-16/32). Neste caso, 11 Bytes poderia ser responsável por menos de 11 caracteres.

Além disso esses tipos de campos podem ser tratados de forma diferente em relação aos caracteres acentuados ou caso, por exemplo 'binaryField (ete) = 'été'' não irá corresponder enquanto 'CharField (ete) = 'été'' força (novamente não tenho certeza sobre a Oracle).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top