IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   как узнать занимаемый размер в My SQL (http://www.imho.ws/showthread.php?t=55320)

shuron 31.03.2004 20:40

как узнать занимаемый размер в My SQL
 
картинки хранятся в MySQl
а как узнать размер етой картинки какой запрос?

Vaulter 31.03.2004 21:01

shuron
какой именно размер? данных, по вертикали?

Ghost 31.03.2004 21:07

Тоже не въехал. В базе хранятся сами картинки или ссылки на них? Если ссылки то вот (на перле):
Код:

use Image::Info qw(image_info dim); # модуль для определения параметров изображения
my $img_file_size = -s "$path_to_image"; # размер файла рисунка
my $info = image_info("$path_to_image");
if (my $error = $info->{error}) { die "Can't parse image info: $error\n"; }
my $img_color = $info->{color_type}; # количество цветов
my ($img_width, $img_height) = dim($info); # размеры по горизонтали и вертикали


shuron 31.03.2004 21:33

я имеюю ввиду сами картинки хранятся в базе...
в BLOP и вот размерчик занимаемой памяти данной картинки... как бы узнать

на перле я не сильно рублю...
для PHP надо

is_absent 01.04.2004 06:14

shuron
Если речь идет о MySQL то юзай length.

shuron 02.04.2004 00:29

угу попробую...

а может примерчиком?

Hubbitus 02.04.2004 00:56

А что примерчиком требуется?
На РНР: BLOB же хранится и извлекается в строке, значит можно использовать стандартную функцию strlen() - которая и покажет размер в байтах (@_is_absent наверное что-то вроде этого имел ввиду).

Но я думаю правильнее использовать функцию mysql_fetch_lengths().

is_absent 02.04.2004 16:58

Цитата:

Но я думаю правильнее использовать функцию mysql_fetch_lengths()
Честно говоря не знаю точно, как работает эта функция, но имхо это эквивалентные запросы будут. и по времени и по нагрузке на сервер. Длина (в байтах) блоба хранится отдельно и именно ее скорее всего возвращает функция length в MySQL и mysql_fetch_lengths() в PHP.

Hubbitus 02.04.2004 17:16

Я тоже думаю что запросы эквивалентны, только если данные из таблицы уже выбраны и есть ресурс на эту таблицу, эта функция, должна быстрее намного работать, т.к. не производит новых запросов к БД, а только извлекает информацию...

Если же просто нужно получить информацию о том что хранится в базе без ее извлечения то, наверное лучше length().

is_absent 03.04.2004 14:59

Hubbitus
согласен :)
Правде еще можно выбирать вместе с данными и их длину....

Hubbitus 03.04.2004 16:23

Цитата:

@_is_absent:Правде еще можно выбирать вместе с данными и их длину....
Насколько я понимаю, mysql_fetch_lengths() именно так и делает автоматически....

Хотя конечно можно и явно указать это в запросе.

shuron 03.04.2004 16:34

Дайте пример кода...
вот я вытаскиваю конкретную картинку из BLOP
в переменную.. как определить размер этой картинки (размер занимаемой ей памяти)

Hubbitus 03.04.2004 16:58

А, ну если уже вытащена, то можно просто в PHP использовать strlen($вытащенная_переменная)...

Или так например:
Код:

$result=mysql_query("select image from table where .....");
list($img)=mysql_fetch_row($result); //Сама картинка предположим
list($img_size)=mysql_fetch_lengths(;куыгде);//Будет именно размер полученной картинки.

Также, о чем и @_is_absent говорит, можно так:
Код:

$result=mysql_query("select image, length(image) from table where .....");
list($img, $img_size)=mysql_fetch_row($result);

IMHO наиболее правильными являются последние 2 варианта.
И если необходимо получить только размер хранящейся картинки, без ее получения, то однозначно лучше последний вариант (тут я полностью согласен с @_is_absent)

shuron 14.05.2004 23:21

спасибо обоим!!!

Perfilev 10.04.2005 01:30

Возник вопрос:
в базе (mysql) лежат несколько записей пользователя
как узнать, сколько места в байтах они занимают?
Код:

    $result=mysql_query("SELECT length(page_content) FROM pages WHERE page_userid=1");
    $r=mysql_fetch_row($result);
    echo $r[0];

так не получается - выдаёт размер только одной записи и то не уверен, что 1 символ = 1 байт
Подскажите, плз.

BorLase 10.04.2005 02:27

Элементарно, Ватсон...

SELECT sum(length(page_content)) FROM pages WHERE page_userid=1

Perfilev 10.04.2005 09:21

Ладно, с этим разобрались. Спасибо.
А как же насчёт размера, занимаемом на диске? 1 символ = 1 байт?

mackuler 10.04.2005 20:15

Andy1
место, занимаемое на диске зависит от типа поля. varchar занимает (кол-во символов в текущей ячейке + 1) байт, а text, например, занимает 64 кб независимо от длины сообщения в этой ячейке.

update: сорри, соврал. textы и blobы как и varchar требуют памяти в соответствии с длиной содержимого..

BorLase 11.04.2005 02:11

на 100% утверждать не буду (не уверен, что майскл с чем-то не путаю) - но если БД в юникоде - может различаться в разы - один символ 2 байта


Часовой пояс GMT +4, время: 17:14.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.