0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
1 | |
Кодировка UTF-8 в полях таблицы27.07.2008, 13:05. Показов 16758. Ответов 14
Метки нет (Все метки)
0
|
27.07.2008, 13:05 | |
Ответы с готовыми решениями:
14
Кодировка utf-8 Кодировка UTF-8 Qt кодировка UTF-8 Кодировка UTF-8 |
0 / 0 / 0
Регистрация: 23.07.2008
Сообщений: 44
|
|
27.07.2008, 21:36 | 2 |
Oracle поддерживает 2 character set'а: Database Character set (тип полей CHAR и VARCHAR2) и National Character Set (тип полей NCHAR и NVARCHAR2).
Оба задаются при создании базы. Если какой-то из них - UTF8, можно использовать соответствующие типы полей. Изменить оба сета можно коммандой alter database [national] character set, однако это может привести к проблемам, если в базе уже используются поля соответствующих типов. r-ivan.
0
|
0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
28.07.2008, 12:30 [ТС] | 3 |
Так, какой тип нужно применить для UTF-8?
База только проектируется.
0
|
0 / 0 / 0
Регистрация: 23.07.2008
Сообщений: 44
|
|
28.07.2008, 13:42 | 4 |
На первый взгляд лучше всего - поставьте character set = utf8 и пользуйтесь типом varchar2.
Честно говоря, никогда так не пробовал, не знаю какие могут быть глюки. Если это по каким-то причинам нежелательно, можно поставить national character set = utf8 и пользоваться типом nvarchar2. Да, ещё надо иметь в виду, что длина поля задаётся в байтах, а не в символах.
0
|
0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
28.07.2008, 13:53 [ТС] | 5 |
Под термином 'character set', Вы имеете в виду значение глобальной переменной NLS_LANG на сервере?
0
|
0 / 0 / 0
Регистрация: 23.07.2008
Сообщений: 44
|
|
28.07.2008, 14:13 | 6 |
Не совсем так. Параметр NLS_LANG определяет кодировку, которую будут исползовать клиентские приложения, запущенные на сервере. Charsets базы задаются при её инсталляции и впоследствии могут быть изменены только при помощи alter database.
Посмотреть их можно в таблице nls_database_parameters where parameter in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET')
0
|
0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
28.07.2008, 14:32 [ТС] | 7 |
Вот результат запроса:
NLS_CHARACTERSET = US7ASCII NLS_NCHAR_CHARACTERSET = US7ASCII Вы предлагаете их заменить на UTF8, а какое значение при этом должна иметь NLS_LANG, сейчас она - AMERICAN_AMERICA.WE8ISO8859P1, я пробовал AMERICAN_AMERICA.UTF8 - не помогает - кириллицы не понимает.
0
|
0 / 0 / 0
Регистрация: 23.07.2008
Сообщений: 44
|
|
28.07.2008, 14:53 | 8 |
По-моему, в этом варианте (US7ASCII), кирилица в базе не может корректно храниться (и показываться, естественно, тоже - каким бы не был NLS_LANG).
В NLS_LANG должна быть кодировка, которую понимают клиентские приложения на данной машине (можно и UTF8). За перекодировку отвечает Oracle. Попробуйте для начала поэкспериментировать с national character set и типом nvarchar2. Вообще, если нужна только кирилица, лучше не заморачиваться на UTF8, а использовать однобиьные кирилические кодировки.
0
|
0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
28.07.2008, 15:10 [ТС] | 9 |
NVARCHAR2 - кириллицы не проходят, при вставке Oracle выдает сообщение character set mismatch.
В базе будет три языка (русский, английский и арабский).
0
|
0 / 0 / 0
Регистрация: 23.07.2008
Сообщений: 44
|
|
28.07.2008, 15:31 | 10 |
Так national character set надо предварительно поменять (на UTF8).
0
|
0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
30.07.2008, 17:11 [ТС] | 11 |
Не удается менять эти параметры, сервер говорит, что это нужно сделать, когда база в неактивном состоянии.
Ну, ведь к неактивной базе невозможно соединиться.
0
|
0 / 0 / 0
Регистрация: 23.07.2008
Сообщений: 44
|
|
30.07.2008, 18:30 | 12 |
Запустите SQL*Plus из командной строки:
sqlplusw /nolog Далее в SQL*Plus: SQL> connect <username>/<password> as sysdba; SQL> startup force restrict SQL> alter database national character set UTF8; SQL> startup force
0
|
0 / 0 / 0
Регистрация: 22.07.2008
Сообщений: 16
|
|
30.07.2008, 19:01 [ТС] | 13 |
Вот что пишет:
database must be mounted EXCLUSIVE and not open to activate
0
|
0 / 0 / 0
Регистрация: 30.05.2014
Сообщений: 2
|
|
09.09.2008, 15:22 | 14 |
А зачем человеку заморачиваться с nvarchar/nchar ?
В случае поддержки 3-х несхожих языков и большого проще всю базу перевести на UTF8. Правда при этом максимально допустимые размеры строковых типов уменьшатся. Код
SQL> connect <username>/<password> as sysdba; SQL> startup force exclusive restrict SQL> alter database character set UTF8; SQL> startup force
0
|
0 / 0 / 0
Регистрация: 30.05.2014
Сообщений: 2
|
|
09.09.2008, 15:24 | 15 |
в дополнение:
опцию force лучше не использовать на открытой базе, т.к. она закрывает ее abort-ом, что не есть хорошо. лучше оную опцию выкинуть из команд, а базу перед изменением чарсета закрыть хотя бы shutdown immediate
0
|
09.09.2008, 15:24 | |
09.09.2008, 15:24 | |
Помогаю со студенческими работами здесь
15
Кодировка UTF-8 Кодировка UTF-8 в PHP Кодировка UTF-8 не функционирует Не работает кодировка utf-8 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |