Volod, Вероятно вы не совсем правильно используете
substring(). Первый параметр -
строка, второй -
позиция, третий -
длина.
Например, для чтения файла по 64 символа будут требоваться запросы:
Код:
SELECT mid(load_file('/etc/passwd'), 1, 64);
SELECT mid(load_file('/etc/passwd'), 1 + 64, 64);
SELECT mid(load_file('/etc/passwd'), 1 + 64 * 2, 64);
SELECT mid(load_file('/etc/passwd'), 1 + 64 * 3, 64);
...
Изменяется только второй параметр, к нему идет добавление 64.
Если надо получить кол-во символов в файле или кол-во строк, нужно обрабатывать MySQL-средствами содержимое. Пример:
Код:
SELECT length(load_file('/etc/passwd')); // Размер файла
SELECT length(replace(@:=load_file('/etc/passwd'),0x0A,11))-length(@); // Кол-во строк
SELECT length(replace(@:=load_file('/etc/passwd'),'%0A',@))/length(@); // Вариант на 2 символа короче
...
Последние варианты немного костыльные - стандартной функции для поиска количества вхождений нет.
Для вывода файла методами error-based информация о его длине не требуется - она может быть полезна только для вас.
Для ускорения процесса эксплуатации среднестатистической error-based сейчас применяют два не легких способа:
- Изменение кодирвки, например с 8-ми до 5-ти бит на символ
- Использование вариации error-based векторов, например варианта с name_const и group by одновременно, чередуя их в зависимости от одного из битов.