|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Здравствуйте. Подскажите такой вопрос. Есть поле VARCHAR2, выборка из которого нужна в виде RAW (в основном) . Есть ли смысл ,изначально, хранить данные в RAW? Приводит ли преобразование UTL_RAW.cast_to_raw к лишним ресурсозатрам? На сколько мне извесно, в VARCHAR2 и в RAW данные хранятся одинаково. Интерпретируются по-разному. Отсюда и смысла хранить в RAW нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:15 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Каким образом они могут хранится одинаково? Если varchar2 это строки, а raw это любые двоичные данные. Очень многие данные корректно в виде строки представлены быть не могут. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:19 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Каким образом они могут хранится одинаково? Если varchar2 это строки, а raw это любые двоичные данные. Очень многие данные корректно в виде строки представлены быть не могут. Да, но строки - тоже двоичные данные. Меня интересует вопрос, происходит ли преобразовние данных при CAST_TO_RAW. Кодируется ли строка, или сохраняет свой "первобытный" вид. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:28 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Lemkoleg при CAST_TO_RAW 1. IMHO термин CAST в программирование имеет достаточно четкое значение 2. строки, конечно, это тоже данные, но внезапно, не все бинарные данные - строки ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:38 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Первая же ссылка в гугле: 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:38 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Alexander A. Sak, Хотелось удостовериться. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 12:48 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Lemkolegстроки - тоже двоичные данные. Нет, строки это совсем не двоичные данные. Иначе на этом форуме не было бы столько чайников с криком "памагите, кракозябры". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 13:12 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Строки -это интерпретация двоичных данных. Вопрос только в том, проиcходит ли их кодирование , например в Base64 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 13:37 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Lemkoleg Dimitry Sibiryakov, Строки -это интерпретация двоичных данных. Вопрос только в том, проиcходит ли их кодирование , например в Base64 Не човчем (с) При сохранении в строку строка приводится к database characterset. При сохранении в raw - нет. Т.е. в БД в виде строки может храниться совсем не тот набор двоичных данных, который был передан. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 14:54 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
andrey_anonymous, Это, если бд преобразовывает в строку, согласно database characterset. Но, меня интересует ресурсозатраты именно при приобразовании varchar2 в raw. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 15:18 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
LemkolegЭто, если бд преобразовывает в строку Не "если", а "когда". Любая строка преобразуется. По идее, она ещё и на валидность должна проверяться, но индусы забили. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 15:20 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
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 И я пытаюсь в этом разобратьсяю ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 16:09 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
LemkolegЯ повторяю, меня интересует, в первую очередь, ресурсозатратность: тратятся ли дополнительные ресурсы системи в случаи преобразования VARCHAR2 в RAW. А вообще-то в первую очередь тебя должно волновать чтобы все приложения получили именно те данные, которые ты хотел. Если хотя бы одно вместо них получит мусор - уже неважно с какой скоростью это случится. Если ещё не дошло: у тебя база с чарсетом utf-8, клиент с NLS_LANG AL32UTF8 сохраняет в VARCHAR2 поле бинарные данные - ок, они не преобразовались и легли так, как были отправлены, клиент с MLS_LANG CL8WIN1251 получает эти данные - опаньки, приехали, сплошные знаки вопроса. Наоборот - ещё забавнее. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 16:19 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Не "если", а "когда". Любая строка преобразуется. По идее, она ещё и на валидность должна проверяться, но индусы забили. Может они и забили, но большая часть софта написана на C. Т.ч. отхватить проблемы например с chr(0) можно запросто Ну и с неваиладными строками тоже могут быть глюки. Если разрезать UTF8 строку по кусочках в виде байтов, то потом склеить ее не всегда получается. Тест кейс не приведу, но на такое нарывались. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 17:12 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
IMHO Хранить бинарные данные в varchar2 можно, только если они RAW2HEX, HEX2RAW или, в крайнем случае, base64 (uuencode и так далее) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2020, 17:14 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
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? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 01:19 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
andrey_anonymous, я знаю о кодировании. Кодирование символов будет, исключительно, в UTF-8. Меня интересует одно: если строка, в основном используется в двоичном представлении, то есть ли смысл изначально хранить ее в поле RAW. Ресурсоемкоемно ли БД выполнять UTL_RAW.cast_to_raw каждый раз. Если , при этом, происходит только смена типа данных, без изменения содержимого, то нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:02 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Lemkoleg интересует одно: если строка, в основном используется в двоичном представлении, то есть ли смысл изначально хранить ее в поле RAW. Если это строка - имеет смысл использовать строковые типы, они для этого предназначены. Если это бинарные данные , не подлежащие обработке строчными средствами СУБД - то имеет смысл использовать бинарные типы, чтобы избежать нежелательных автоматических преобразований. Однако если Вы хотите использовать oracle rdbms просто как мешок с данными для приложения - то имеет смысл выбрать платформу подешевле. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 12:25 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Может они и забили, но большая часть софта написана на C. Т.ч. отхватить проблемы например с chr(0) можно запросто "Отхватить", насколько я понимаю, может клиент, который читает строки в парадигме "нулевой символ-конец строки". Так, например, если юзать API PL/SQL Developer для написания плагина, то при чтения данных оно возвращает указатель char*, и если оно не делает каких-либо специальных преобразований (я не проверял), то можно легко потерять часть varchar2-строки, если в ее "середине" есть нулевой символ. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:46 |
|
RAW vs VARCHAR2
|
|||
---|---|---|---|
#18+
AmKad, То есть в таком случае правильно говорить не "отхватить", а "не дохватить". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.08.2020, 13:57 |
|
|
start [/forum/topic.php?fid=52&fpage=39&tid=1880981]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 179ms |
0 / 0 |