Разница между байтом и символом в типах данных столбцов



в Oracle, в чем разница между :



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


и



CREATE TABLE CLIENT
(
NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
ID_CLIENT NUMBER
)
740   4  

4 ответов:

предположим, что набор символов базы данных-UTF-8, который является рекомендуемым параметром в последних версиях Oracle. В этом случае некоторые символы занимают более 1 байта для хранения в базе данных.

Если вы определяете поле как VARCHAR2(11 BYTE), Oracle может использовать до 11 байт для хранения, но на самом деле вы не можете хранить 11 символов в поле, потому что некоторые из них занимают более одного байта для хранения, например, неанглийские символы.

определив поле VARCHAR2(11 CHAR) вы говорите Oracle, что он может использовать достаточно места для хранения 11 символов, независимо от того, сколько байтов требуется для хранения каждого из них. Для одного символа может потребоваться до 4 байт.

один имеет ровно пространство для 11 байт, другой ровно для 11 символов. Некоторые наборы символов, такие как варианты Юникода, могут использовать более одного байта на символ, поэтому в поле 11 байт может быть меньше 11 символов в зависимости от кодировки.

Смотрите также http://www.joelonsoftware.com/articles/Unicode.html

в зависимости от конфигурации системы размер символа, измеренного в байтах, может меняться. В ваших примерах:

  1. ограничивает поле до 11 байт
  2. ограничивает поле до 11 CHARактеры


Вывод: 1 символ не равен 1 байту.

Я не уверен, так как я не Пользователь Oracle, но я предполагаю, что разница заключается в использовании многобайтовых наборов символов, таких как Unicode (UTF-16/32). В этом случае 11 байт может составлять менее 11 символов.

также Эти типы полей могут рассматриваться по-разному в отношении акцентированных символов или регистра, например 'binaryField(ete) = "été"' не будет соответствовать, а 'charField(ete) = "été"' может (опять же не уверен в Oracle).

Comments

    Ничего не найдено.