|
Записать картинку как строку (сериализация)
|
|||
---|---|---|---|
#18+
Добрый день. Нужна функциональность сохранение небольшой пользовательской картинки в БД как строки (именно, а не как binary). Вопрос, как лучше это сделать? Как конкретно перевести большой бинарный массив (картинка) в строку? Если я просто буду добавлять число, содержащееся в каждом байте массива, к строке и затем сохраню такую строку в БД, будет ли это проавильно? Почему говорят, что при сериализации возрастает размер? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2011, 14:46 |
|
Записать картинку как строку (сериализация)
|
|||
---|---|---|---|
#18+
Если я просто буду добавлять число, содержащееся в каждом байте массива, к строке и затем сохраню такую строку в БД, будет ли это проавильно?Это будет наименее правильно. Например, как будешь отличать конец одного числа и начало другого? Почему говорят, что при сериализации возрастает размер?Потому что можно сказать, что бинарный формат это текстовый формат из 256 символов. Часть из этих символов нечитаема как текст (символы табуляции, возврата каретки и т.п.), поэтому их нужно закодировать читаемыми символами. Одним не получится, он занят самим собой, следовательно нужна кодовая комбинация из нескольких , следовательно растет размер. Самая жирная и быстрая для конвертации кодировка это hex, она кодирует все 256 символов парой символов из диапазона 0-F, поэтому размер возрастает в два раза, а в зависимости от типа поля в бд на диске может быть занято и больше. Самая распространенная — base64, она увеличивает объем на треть. Твой вариант на вскидку увеличил бы объем раза в 4-5. Выбор кодировки нужно делать после ответа на вопрос, нафига это вообще надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2011, 21:25 |
|
Записать картинку как строку (сериализация)
|
|||
---|---|---|---|
#18+
Игорь1973, base64 - гарантированнный вариант храения инфы. НО! - есть ограничение по объему стринга в вашей БД. Есть ещё BLOB - но при этом _вы_ должны изучить работу с импортом/экспортом полей... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2011, 10:17 |
|
Записать картинку как строку (сериализация)
|
|||
---|---|---|---|
#18+
авторкак отличать конец одного числа и начало другого Ну, я думаю, можно сохранять просто числа, по три симсола на число. Добавлять ведущие нули, и тогда на каждое число будет приходиться строго 3 символа. Или да, шестнадцатиричная hex - будет 2 символа на число. А base64, значит обеспечивает 1.3 символа на чило, понятно. Что касается назначения сериализации - оно широкое (например, передать объект по HTTP), но у меня проще - для хранения в одном текстовом поле разнородных объектов (иконок и др.). Только, плз, ничего не нужно говорить про "правильную структуру", нормализацию и тп. Спасибо, все прояснили :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2011, 13:57 |
|
|
start [/forum/topic.php?fid=60&fpage=88&tid=2158194]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 312ms |
total: | 436ms |
0 / 0 |