Разница между varchar2 (10), varchar2 (10 байт) и varchar2 (10 символов) - PullRequest
0 голосов
/ 05 февраля 2019

Клиент сказал мне заменить varchar2(10 char) на varchar2(10 byte).Я точно не знаю разницу в varchar2(10),varchar2(10 char) и varchar2(10 byte).Также не могли бы вы сказать мне, в каком сценарии мы должны использовать.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

От asktom https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9532325800346614530

Varchar2 (10) использует текущее значение NLS_LENGTH_SEMANTICS, чтобы определить предел для строки.

Если это байт, то это 10 байт.

Если это символ, то это 10 символов.

В многобайтовых наборах символов они могут быть разными!Поэтому, если NLS_LENGTH_SEMANTICS = byte, вы можете хранить только 5 символов в вашем varchar2.

Так что varchar2 (10 символов) является явным.Это может хранить до 10 символов.Varchar2 (10) неявный.Он может хранить 10 байтов или 10 символов, в зависимости от конфигурации БД.

Лучше быть явным (10 символов).Хотя все ваши базы данных prod / test / dev должны иметь одинаковые настройки для NLS_LENGTH_SEMANTICS, это не значит, что они делают ...

0 голосов
/ 05 февраля 2019

VARCHAR2(10 byte) будет поддерживать до 10 байтов данных, которые могут быть всего двумя символами в многобайтовых наборах символов.

VARCHAR2(10 char) может поддерживать до 40 байтов информации ибудет поддерживать до 10 символов данных.

Varchar2 (10) использует текущее значение NLS_LENGTH_SEMANTICS, чтобы определить предел для строки.

в байтах, затем 10 байтов.

в случае символа, затемэто 10 символов.

В многобайтовых наборах символов они могут быть разными!Поэтому, если NLS_LENGTH_SEMANTICS = byte, вы можете хранить только 5 символов в вашем varchar2.Таким образом, varchar2 (10 символов) является явным.Это может хранить до 10 символов.Varchar2 (10) неявный.Он может хранить 10 байтов или 10 символов, в зависимости от конфигурации БД.

ocacle ask link

...