Есть ли ситуации, в которых вы бы использовали NLS_LENGTH_SEMANTICS = BYTE в базе данных Unicode? - PullRequest
4 голосов
/ 08 октября 2010

Наличие базы данных Oracle в Unicode (многобайтовой кодировке) с NLS_LENGTH_SEMANTICS = BYTE похоже на катастрофу, ожидающую наступления.Проверка поля в большинстве приложений проверяет только количество символов в пределах, а не длину байтовой последовательности в схеме кодировки символов по умолчанию в базе данных!Если у вас есть база данных Unicode, есть ли веская причина использовать NLS_LENGTH_SEMANTICS = BYTE вместо CHAR?

1 Ответ

2 голосов
/ 09 октября 2010

Думаю, это просто наследие. Есть много старых приложений, которые всегда работали с байтами и могут запутаться, если это изменится. Все, что приводит к тому, что байтовые строки и индексы уходят во внешнее приложение / язык, работающий в байтах, будет работать странным и непредсказуемым образом, если под ним переопределены индексы.

Я бы не использовал семантику байтов для нового приложения, и я согласен, что это не очень хороший вариант по умолчанию. Но, надеюсь, вы используете NVARCHAR, что позволяет избежать этой проблемы (поскольку она всегда основана на символах).

...