Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
закачиваю схему импортом из дампа в базу с кодировкой UTF8, соответственно создаются новые таблицы. Так вот столбцы с типом VARCHAR2 создаются как VARCHAR2(50 byte) (к примеру), но данных влазиет туда не больше 50 символов... соответственно тип должен был стать VARCHAR2(50 char)? или я не прав?

Сам дам сделан с базы с кодировкой CL8MSWIN1251.
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6
20 июн 08, 11:07    [5824904]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
никто с этим не сталкивался?
20 июн 08, 17:20    [5828302]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
VanoR
закачиваю схему импортом из дампа в базу с кодировкой UTF8, соответственно создаются новые таблицы. Так вот столбцы с типом VARCHAR2 создаются как VARCHAR2(50 byte) (к примеру), но данных влазиет туда не больше 50 символов... соответственно тип должен был стать VARCHAR2(50 char)? или я не прав?

Сам дам сделан с базы с кодировкой CL8MSWIN1251.
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6

а в той базе, откуда экспорт? ;)
20 июн 08, 17:26    [5828353]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
VanoR
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6
Где именно определен и как вы это проверяете?
20 июн 08, 17:32    [5828388]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
SQL*Plus
VanoR
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6
Где именно определен и как вы это проверяете?

select * from v$nls_parameters;
20 июн 08, 17:37    [5828431]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
VanoR
SQL*Plus
VanoR
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6
Где именно определен и как вы это проверяете?

select * from v$nls_parameters;

да и при установки базы в параметрах инициализации указал
20 июн 08, 17:38    [5828437]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
orawish
VanoR
закачиваю схему импортом из дампа в базу с кодировкой UTF8, соответственно создаются новые таблицы. Так вот столбцы с типом VARCHAR2 создаются как VARCHAR2(50 byte) (к примеру), но данных влазиет туда не больше 50 символов... соответственно тип должен был стать VARCHAR2(50 char)? или я не прав?

Сам дам сделан с базы с кодировкой CL8MSWIN1251.
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6

а в той базе, откуда экспорт? ;)

а откуда экспорт, там не юникодная кодировка(CL8MSWIN1251), в типах столбцов не указано ни CHAR ни BYTE.

хотя select * from v$nls_parameters; выдает NLS_LENGTH_SEMANTICS = BYTE. Думаете из-за этого?

А еще тогда, почему например в колонку VARCHAR2(50 byte) влазиет 50 символов? (база UTF8)
20 июн 08, 17:41    [5828464]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
VanoR
VanoR
SQL*Plus
VanoR
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6
Где именно определен и как вы это проверяете?

select * from v$nls_parameters;

да и при установки базы в параметрах инициализации указал
Это хорошо...

А что дает
SELECT * FROM NLS_DATABASE_PARAMETERS
?
20 июн 08, 17:51    [5828540]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
VanoR
orawish
VanoR
закачиваю схему импортом из дампа в базу с кодировкой UTF8, соответственно создаются новые таблицы. Так вот столбцы с типом VARCHAR2 создаются как VARCHAR2(50 byte) (к примеру), но данных влазиет туда не больше 50 символов... соответственно тип должен был стать VARCHAR2(50 char)? или я не прав?

Сам дам сделан с базы с кодировкой CL8MSWIN1251.
Параметр NLS_LENGTH_SEMANTICS в базе (UTF8) определен как CHAR.
БД ORA 9.2.0.6

а в той базе, откуда экспорт? ;)

а откуда экспорт, там не юникодная кодировка(CL8MSWIN1251), в типах столбцов не указано ни CHAR ни BYTE.)

Это только так вам кажется. ;)

VanoR
хотя select * from v$nls_parameters; выдает NLS_LENGTH_SEMANTICS = BYTE. Думаете из-за этого?

А еще тогда, почему например в колонку VARCHAR2(50 byte) влазиет 50 символов? (база UTF8)

Во! Вот это гораздо более интересный вопрос. Действительно, при экспорте (именно) как-у-вас.
Бывает, что данных в таблицу влезает больше_чем_оно_может_по_новой спецификации.
Это лажа, но бывает. В тех случаях, которые я видел (на 9.2.0.6, кажется) - так (криво) вставленные данные впоследствии при любом дмл-обновлении начинали таки ругаться ой_я_жеж_мол_не_влезаю..
20 июн 08, 17:54    [5828552]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
SQL*Plus

А что дает
SELECT * FROM NLS_DATABASE_PARAMETERS
?

прям сейчас не могу сказать, база не под рукой... позже
20 июн 08, 17:56    [5828571]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
orawish
VanoR
хотя select * from v$nls_parameters; выдает NLS_LENGTH_SEMANTICS = BYTE. Думаете из-за этого?

А еще тогда, почему например в колонку VARCHAR2(50 byte) влазиет 50 символов? (база UTF8)

Во! Вот это гораздо более интересный вопрос. Действительно, при экспорте (именно) как-у-вас.
Бывает, что данных в таблицу влезает больше_чем_оно_может_по_новой спецификации.
Это лажа, но бывает. В тех случаях, которые я видел (на 9.2.0.6, кажется) - так (криво) вставленные данные впоследствии при любом дмл-обновлении начинали таки ругаться ой_я_жеж_мол_не_влезаю..

есть и такое... правда не много совсем
но вот ведь после закачки уже данные я в ручную туда заталкивал... и нормально, сохраняется и не ругается.
20 июн 08, 17:59    [5828592]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
Самое плохое конечно, что импорт вообще запись откидывает :(
Вот обрезал бы, былоб здорово
20 июн 08, 18:02    [5828610]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
VanoR
orawish
..

есть и такое... правда не много совсем
но вот ведь после закачки уже данные я в ручную туда заталкивал... и нормально, сохраняется и не ругается.
.. ничего удивительного, что чудеса могут проявляться по-разному..
Возможно, оно от версии зависит. На всякий случай - попробуйте, там, где имеете
такое переполнение_от_экспорта ~ update t set col1=col1;
20 июн 08, 18:08    [5828638]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
orawish
ничего удивительного, что чудеса могут проявляться по-разному..
Возможно, оно от версии зависит. На всякий случай - попробуйте, там, где имеете
такое переполнение_от_экспорта ~ update t set col1=col1;

уже после импорта? а зачем? типа еще могут повываливаться записи?
20 июн 08, 18:11    [5828654]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
VanoR
orawish
ничего удивительного, что чудеса могут проявляться по-разному..
Возможно, оно от версии зависит. На всякий случай - попробуйте, там, где имеете
такое переполнение_от_экспорта ~ update t set col1=col1;

уже после импорта? а зачем? типа еще могут повываливаться записи?

ну! (а я жеж о чём?)
20 июн 08, 18:19    [5828681]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
а случаем неизвестно? на 10-м оракле таких чудес не наблюдалось?
думаю может на него лучше перейти...
20 июн 08, 18:24    [5828703]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
VanoR
а случаем неизвестно? на 10-м оракле таких чудес не наблюдалось?
думаю может на него лучше перейти...

Я бы на вашем месте думал про другое:
1) суровыми пытками (желающих того) убедиться, что вам таки нужен уникод.
2) если всё же нужен - изменить семантику исходной базы на чар и + модифицировать
все таблицы на столбцы с спецификацией чар.
3) в исходной же базе - все данные, которые потенциально не_влезут в уникодовые строки усечь до размера, который влезет.

ну и только тут сделать экспорт
20 июн 08, 18:32    [5828741]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
VanoR
А еще тогда, почему например в колонку VARCHAR2(50 byte) влазиет 50 символов? (база UTF8)
Какие именно 50 символов?
Английские буквы и цифры?
Русские буквы?

Что дает для этого столбца команда
SELECT table_name, column_name, data_type
     , data_length -- Length of the column in bytes
     , char_length -- Displays the length of the column in characters
FROM user_tab_columns
WHERE table_name = 'MY_TAB'
  AND column_name = 'MY_COL';
?
20 июн 08, 18:35    [5828750]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
VanoR
а случаем неизвестно? на 10-м оракле таких чудес не наблюдалось?
думаю может на него лучше перейти...
Если вам все равно куда переходить, то переходите на Oracle10g R2 (10.2.0.x) (где x лучше пусть будет равно 4)

Но это следует делать совсем не по той причине, которую вы описали.
20 июн 08, 18:37    [5828754]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
VanoR
Самое плохое конечно, что импорт вообще запись откидывает :(
Вот обрезал бы, былоб здорово
Это вы бросьте! Это не здорово, а недопустимо!
Это в стиле ODBC - не можем записи загрузить - пропускаем...
Зато пользователю нервы не портим сообщениями об ошибках...
20 июн 08, 18:55    [5828827]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
в общем все перевел...
в исходной БД все поля VARCHAR2 типа перевел на VARCHAR2(50 char), выгрузил импортом, и закачал в юникодную БД. никаких данных, из-за перегрузки размера полей совсем не отбросилось. Теперь вот смотрю и наслаждаюсь, как в этиже поля сохраняются данные на любых языках. Даж клинтское ПО особо менять не пришлось, так шрифты только в отдельных местах

Отдельное Спасибо SQL*Plus за наводку
SELECT table_name, column_name, data_type
     , data_length -- Length of the column in bytes
     , char_length -- Displays the length of the column in characters
FROM user_tab_columns
WHERE table_name = 'MY_TAB'
  AND column_name = 'MY_COL';
И всем помогавшим тоже.
23 июн 08, 17:45    [5835942]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8130
VanoR
в общем все перевел...
в исходной БД все поля VARCHAR2 типа перевел на VARCHAR2(50 char), выгрузил импортом
SQL*Plus
(вы хотели сказать "экспортом"!?)
, и закачал в юникодную БД. никаких данных, из-за перегрузки размера полей совсем не отбросилось.
То есть в исходной базе вы в файле параметров задали
NLS_LENGTH_SEMANTICS = CHAR
и перезапустили экземпляр?
А потом уже выполнили экспорт?
И затем полученный файл экспорта замечательно импортировалтся в целевую БД (UTF-8)?
Все именно так?
23 июн 08, 19:04    [5836511]     Ответить | Цитировать Сообщить модератору
 Re: UTF8 и тип столбца  [new]
VanoR
Member

Откуда: оттуда
Сообщений: 711
SQL*Plus
То есть в исходной базе вы в файле параметров задали
NLS_LENGTH_SEMANTICS = CHAR
и перезапустили экземпляр?
А потом уже выполнили экспорт?
И затем полученный файл экспорта замечательно импортировалтся в целевую БД (UTF-8)?
Все именно так?

Не, немного не так
смысла нет в исходной базе менять NLS_LENGTH_SEMANTICS на CHAR, тип полей то все равно останется в байтах!! Если поменять и посмотреть на поля типа VARCHAR2, то размерность их будет как 50 byte (например).
А я просто пробежался по всем таблицам, и всем полям типа VARCHAR2 в размер добавил char (VARCHAR2(50 char)). ну и все, экспорт и импорт.
24 июн 08, 07:46    [5837751]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить