Простой ответ заключается в том, что, в отличие от MySQL, наборы символов не могут быть определены в уровень столбца (или таблицы). Latin1
также не является допустимым набором символов Oracle.
Наборы символов одинаковы для всей базы данных и будут указаны при создании базы данных. Вы можете найти своего персонажа, выполнив запрос NLS_DATABASE_PARAMETERS
,
select value
from nls_database_parameters
where parameter = 'NLS_CHARACTERSET'
Полный список возможных наборов символов доступен для 11g r2 и для 9i или запрос V$NLS_VALID_VALUES
.
Для установите NLS_LANGUAGE
или NLS_TERRITORY
, но, к сожалению, вы не можете сделать это для набора символов. Я считаю, что это связано с тем, что изменение языка меняет то, как Oracle отображает сохраненные данные, тогда как изменение набора символов меняет то, как Oracle хранит данные.
При отображении данных вы, конечно, можете указать требуемый набор символов в любом клиенте, который вы используете.
Миграция набора символов — нетривиальная задача. не следует делать легкомысленно.
Кстати, почему вы пытаетесь использовать латиницу 1? Было бы более нормально настроить новую базу данных в чем-то вроде UTF-8 (также известной как AL32UTF8
— не используйте UTF8
) или UTF-16, чтобы вы могли эффективно хранить многобайтовые данные. Даже если вам это не нужно сейчас, разумно попытаться - никаких гарантий в жизни - проверить вашу базу данных на будущее без необходимости миграции в будущем.
Если вы хотите указать разные наборы символов для разных столбцов в базе данных, лучшим вариантом будет определить, действительно ли это требование необходимо, и попытаться удалить его. Если это определенно необходимо1, лучше всего использовать набор символов, который является надмножеством всех возможных наборов символов. Затем установите какое-то контрольное ограничение, которое ограничивает столбец определенными шестнадцатеричными значениями. Я бы не рекомендовал делать это вообще, вероятность того, что ошибки закрадываются, огромна, и это чрезвычайно сложно. Более того, разные наборы символов по-разному отображают разные шестнадцатеричные значения. Это, в свою очередь, означает, что вам необходимо принудительно отображать столбец с определенным символом, что невозможно, поскольку оно выходит за рамки базы данных.
1. Мне было бы интересно узнать ситуацию
person
Ben
schedule
31.03.2012
SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'
, а затем проверить, поддерживает ли онlatin
или нет. - person Gaurav Soni   schedule 31.03.2012error is new to me
означает, что я никогда не видел ошибки из-заcharacter set
:) Даже я не знаюcharacter sets can't be defined at column level
спасибо за ответ +1 за это - person Gaurav Soni   schedule 31.03.2012