Зависит от того, как был установлен Oracle. В процессе установки устанавливается опция NLS_CHARACTERSET. Вы можете найти его с помощью запроса SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET'
.
Если ваш NLS_CHARACTERSET является кодировкой Unicode, такой как UTF8, отлично. Использование VARCHAR и NVARCHAR практически одинаково. Хватит читать сейчас, просто сделай это. В противном случае, или если у вас нет контроля над набором символов Oracle, читайте дальше.
VARCHAR - Данные хранятся в кодировке NLS_CHARACTERSET. Если на том же сервере есть другие экземпляры базы данных, они могут быть для вас ограничены; и наоборот, так как вы должны поделиться настройкой. В таком поле могут храниться любые данные, которые могут быть закодированы с использованием этого набора символов, и ничего больше . Например, если набор символов MS-1252, вы можете хранить только такие символы, как английские буквы, несколько букв с акцентом и некоторые другие (например, € и -). Ваше приложение будет полезно только для нескольких регионов, которые не могут работать нигде в мире. По этой причине это считается плохой идеей.
NVARCHAR - данные хранятся в кодировке Unicode. Каждый язык поддерживается. Хорошая идея.
А как насчет места для хранения? VARCHAR, как правило, эффективен, поскольку набор символов / кодировка были специально разработаны для конкретной локали. Поля NVARCHAR хранятся либо в кодировке UTF-8, либо в кодировке UTF-16, иронически основываются на настройке NLS. UTF-8 очень эффективен для "западных" языков, но при этом поддерживает азиатские языки. UTF-16 очень эффективен для азиатских языков, но при этом поддерживает «западные» языки. Если вас беспокоит объем памяти, выберите параметр NLS, чтобы Oracle использовал UTF-8 или UTF-16 в зависимости от ситуации.
А как насчет скорости обработки? Большинство новых платформ кодирования используют Unicode изначально (Java, .NET, даже C ++ std :: wstring много лет назад!), Поэтому, если поле базы данных VARCHAR, это заставляет Oracle конвертировать между наборами символов при каждом чтении или записи, что не очень хорошо. Использование NVARCHAR позволяет избежать преобразования.
Итог: используйте NVARCHAR! Это позволяет избежать ограничений и зависимостей, отлично подходит для хранения и обычно также лучше для производительности.