powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / RAW vs VARCHAR2
21 сообщений из 21, страница 1 из 1
RAW vs VARCHAR2
    #39988583
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Подскажите такой вопрос. Есть поле VARCHAR2, выборка из которого нужна в виде RAW (в основном) . Есть ли смысл ,изначально, хранить данные в RAW? Приводит ли преобразование UTL_RAW.cast_to_raw к лишним ресурсозатрам? На сколько мне извесно, в VARCHAR2 и в RAW данные хранятся одинаково. Интерпретируются по-разному. Отсюда и смысла хранить в RAW нет.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988585
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом они могут хранится одинаково?
Если varchar2 это строки, а raw это любые двоичные данные. Очень многие данные корректно в виде строки представлены быть не могут.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988591
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Каким образом они могут хранится одинаково?
Если varchar2 это строки, а raw это любые двоичные данные. Очень многие данные корректно в виде строки представлены быть не могут.

Да, но строки - тоже двоичные данные. Меня интересует вопрос, происходит ли преобразовние данных при CAST_TO_RAW. Кодируется ли строка, или сохраняет свой "первобытный" вид.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988599
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg

при CAST_TO_RAW

1. IMHO термин CAST в программирование имеет достаточно четкое значение
2. строки, конечно, это тоже данные, но внезапно, не все бинарные данные - строки
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988600
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первая же ссылка в гугле:
https://docs.oracle.com/database/121/ARPLS/u_raw.htm#ARPLS71383 CAST_TO_RAW Function
This function converts a VARCHAR2 value represented using some number of data bytes into a RAW value with that number of data bytes. The data itself is not modified in any way, but its datatype is recast to a RAW datatype.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988610
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak,
Хотелось удостовериться. Спасибо
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988624
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkolegстроки - тоже двоичные данные.

Нет, строки это совсем не двоичные данные. Иначе на этом форуме не было бы столько
чайников с криком "памагите, кракозябры".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988636
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
Строки -это интерпретация двоичных данных. Вопрос только в том, проиcходит ли их кодирование , например в Base64
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988667
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg
Dimitry Sibiryakov,
Строки -это интерпретация двоичных данных. Вопрос только в том, проиcходит ли их кодирование , например в Base64

Не човчем (с)
При сохранении в строку строка приводится к database characterset.
При сохранении в raw - нет.
Т.е. в БД в виде строки может храниться совсем не тот набор двоичных данных, который был передан.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988675
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
Это, если бд преобразовывает в строку, согласно database characterset. Но, меня интересует ресурсозатраты именно при приобразовании varchar2 в raw.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988676
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LemkolegЭто, если бд преобразовывает в строку

Не "если", а "когда". Любая строка преобразуется. По идее, она ещё и на валидность должна
проверяться, но индусы забили.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988693
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

LemkolegЭто, если бд преобразовывает в строку

Не "если", а "когда". Любая строка преобразуется. По идее, она ещё и на валидность должна
проверяться, но индусы забили.

Преобразуется в что? Что именно в ней изменяется? Я повторяю, меня интересует, в первую очередь, ресурсозатратность: тратятся ли дополнительные ресурсы системи в случаи преобразования VARCHAR2 в RAW.

select lengthb('рвисвыоиымоыиолылимфы') as first,
lengthb(UTL_RAW.cast_to_raw(c => 'рвисвыоиымоыиолылимфы')) as second,
UTL_RAW.length(UTL_RAW.cast_to_raw(c => 'рвисвыоиымоыиолылимфы')) as third
from dual;

first | second | third
42 84 42



И я пытаюсь в этом разобратьсяю
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988695
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LemkolegЯ повторяю, меня интересует, в первую очередь, ресурсозатратность: тратятся ли
дополнительные ресурсы системи в случаи преобразования VARCHAR2 в RAW.

А вообще-то в первую очередь тебя должно волновать чтобы все приложения получили именно те
данные, которые ты хотел. Если хотя бы одно вместо них получит мусор - уже неважно с какой
скоростью это случится.

Если ещё не дошло: у тебя база с чарсетом utf-8, клиент с NLS_LANG AL32UTF8 сохраняет в
VARCHAR2 поле бинарные данные - ок, они не преобразовались и легли так, как были
отправлены, клиент с MLS_LANG CL8WIN1251 получает эти данные - опаньки, приехали, сплошные
знаки вопроса. Наоборот - ещё забавнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988711
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Не "если", а "когда". Любая строка преобразуется. По идее, она ещё и на валидность должна
проверяться, но индусы забили.

Может они и забили, но большая часть софта написана на C. Т.ч. отхватить проблемы например с chr(0) можно запросто

Ну и с неваиладными строками тоже могут быть глюки. Если разрезать UTF8 строку по кусочках в виде байтов, то потом склеить ее не всегда получается. Тест кейс не приведу, но на такое нарывались.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988712
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO
Хранить бинарные данные в varchar2 можно, только если они RAW2HEX, HEX2RAW или, в крайнем случае, base64 (uuencode и так далее)
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988808
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg
Преобразуется в что? Что именно в ней изменяется? Я повторяю, меня интересует, в первую очередь, ресурсозатратность: тратятся ли дополнительные ресурсы системи в случаи преобразования VARCHAR2 в RAW.

select lengthb('рвисвыоиымоыиолылимфы') as first


Ну вот берем Ваш пример.
Выполняете свой select lengthb('рвисвыоиымоыиолылимфы') as first ...
Один клиент работает в cl8mswin1251, в его случае строка выглядит как
f0 e2 e8 f1 e2 fb ee e8 fb ec ee fb e8 ee eb fb eb e8 ec f4 fb

Второй работает в we8iso8859p5, его строка в сыром виде такая:
e0 d2 d8 e1 d2 eb de d8 eb dc de eb d8 de db eb db d8 dc e4 eb

Т.е. отправляют несколько разные последовательности байт.

Первый клиент работает с БД, созданной под ru8pc866, второй - с БД al32utf8.
И эти сервера сохранят
e0 a2 a8 e1 a2 eb ae a8 eb ac ae eb a8 ae ab eb ab a8 ac e4 eb
и
d1 80 d0 b2 d0 b8 d1 81 d0 b2 d1 8b d0 be d0 b8 d1 8b d0 bc d0 be d1 8b d0 b8 d0 be d0 bb d1 8b d0 bb d0 b8 d0 bc d1 84 d1

соответственно.
Если теперь второй клиент подключится к первому серверу и запросит строку, сохраненную первым - то увидит все ту же "рвисвыоиымоыиолылимфы", поскольку получит e0 d2 d8 e1 d2 eb de d8 eb dc de eb d8 de db eb db d8 dc e4 eb


Вопрос: Вы все еще полагаете, что вопрос хранения бинарных данных в строке заключается в ресурсоемкости cast? :)
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988958
Lemkoleg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,
я знаю о кодировании. Кодирование символов будет, исключительно, в UTF-8. Меня интересует одно: если строка, в основном используется в двоичном представлении, то есть ли смысл изначально хранить ее в поле RAW. Ресурсоемкоемно ли БД выполнять UTL_RAW.cast_to_raw каждый раз. Если , при этом, происходит только смена типа данных, без изменения содержимого, то нет.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39988975
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lemkoleg
интересует одно: если строка, в основном используется в двоичном представлении, то есть ли смысл изначально хранить ее в поле RAW.

Если это строка - имеет смысл использовать строковые типы, они для этого предназначены.
Если это бинарные данные , не подлежащие обработке строчными средствами СУБД - то имеет смысл использовать бинарные типы, чтобы избежать нежелательных автоматических преобразований.
Однако если Вы хотите использовать oracle rdbms просто как мешок с данными для приложения - то имеет смысл выбрать платформу подешевле.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39989021
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Может они и забили, но большая часть софта написана на C. Т.ч. отхватить проблемы например с chr(0) можно запросто
А можно поподробнее? Ораколовая реализация varchar2 ведь допускает хранение нулевого символа в "середине" строки, и в отличие от стандартных С-функций не считает нулевой символ концом строки.
"Отхватить", насколько я понимаю, может клиент, который читает строки в парадигме "нулевой символ-конец строки".
Так, например, если юзать API PL/SQL Developer для написания плагина, то при чтения данных оно возвращает указатель char*, и если оно не делает каких-либо специальных преобразований (я не проверял), то можно легко потерять часть varchar2-строки, если в ее "середине" есть нулевой символ.
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39989026
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

То есть в таком случае правильно говорить не "отхватить", а "не дохватить".
...
Рейтинг: 0 / 0
RAW vs VARCHAR2
    #39989051
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot AmKad#22181469]
Leonid Kudryavtsev
Ораколовая реализация varchar2 ведь допускает хранение нулевого символа в "середине" строки

Угу. Паскальная строка - в начале строки указана длина.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / RAW vs VARCHAR2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]