Максимальное к-во вопросов в опросе?

More
1 month 1 day ago #165859 by shiva522
shiva522 created the topic: Максимальное к-во вопросов в опросе?
Всем привет.

Создал опрос где есть несколько десятков групп,в каждой из которых несколько вопросов. При достижении некоторого к-ва таких групп, при попытке активировать опрос мне выдается сообщение:

Таблица ответов опроса не может быть создана. Обычно это вызвано слишком большим количеством (под-)вопросов в опросе. Попробуйте уменьшить количество вопросов.

Подскажите пожалуйста какое максимальное к-во вопросов в опросе может быть и чем вызваны такие ограничения (ограничение на к-во столбцов в таблице mysql, ограничения в самом limesurvey или еще что то)?

Please Log in or Create an account to join the conversation.

More
1 month 23 hours ago - 1 month 23 hours ago #165869 by shiva522
shiva522 replied the topic: Максимальное к-во вопросов в опросе?
Поискал ответ на свой же вопрос. Как понял, максимальный размер строки в таблице составляет 65535 байт. Таблицы в limesurvey создаются в кодировке utf8mb4_unicode_ci, где 4 байта требуется для хранения 1 символа. Дальше считаю размер моей таблицы lime_survey_XXXXXX:
первые 8 полей:

`id` int(11) NOT NULL AUTO_INCREMENT,
`token` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`submitdate` datetime DEFAULT NULL,
`lastpage` int(11) DEFAULT NULL,
`startlanguage` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`startdate` datetime NOT NULL,
`datestamp` datetime NOT NULL,
`ipaddr` text COLLATE utf8mb4_unicode_ci,

составляют примерно 476 байт без поля TEXT. С его размером я так и не понял. Пишут от 3 байт до 65535 его размеры варьируются.
Дальше идут столбцы varchar(5) в к-ве 1554 штук. если 1554 * 5 символов каждый*4 байта для каждого символа = 23080 байт. Прибавим 476 полей и получаем 23556 байт без учета поля Text где храниться IP респондента.
Таким образом максимальное значение для строки таблицы не достигнуто (если я все правильно понял) 65535 ..
посему, либо я не правильно считаю, либо в самом limesurvey есть ограничение на максимально допустимое к-во столбцов в таблицах опросов..
Last Edit: 1 month 23 hours ago by shiva522.

Please Log in or Create an account to join the conversation.

More
1 month 20 hours ago #165892 by ddrmoscow
ddrmoscow replied the topic: Максимальное к-во вопросов в опросе?
судя по постам и расчетам, речь о MyIsam типе таблиц,
если же таблицы все таки InnoDB (что скорее всего), то у вас как минимум лишних 600+ вопросов+подвопросов .. прийдется резать (разбивать на несколько анкет и редиректить)

у вас реально 1554 вопроса/подвопроса с максимальной длиной ответа 5 знаков каждый ?!
иначе в ваших расчетах не учтены размеры полей самих ответов, которые считаются при создании базы ответов

можете удалять по вопросу/группе с конца и проверить когда получится создать таблицу ответов

чтобы упростить всем задачу, укажите версию LS, БД и тип таблиц БД

можете прикрепить структуру опроса сюда или в личку, попробуем помочь

Please Log in or Create an account to join the conversation.

More
1 month 5 hours ago - 1 month 5 hours ago #165925 by shiva522
shiva522 replied the topic: Максимальное к-во вопросов в опросе?
Совершенно верно. Таблицы используемые в limesurvey (v.2.72.2) MyIsam.

На тему 1554 вопроса я прошу прощения, 1554+8 служебных это то количество на котором я смог активировать опрос. Проблема же на 1617 + 8 полей служебных (речь идет о таблицах Lime_survey_xxxxxx) Не скажу что 1554+8 точное число как крайний предел. Это число плюс-минус 21 столбец. Почему плюс-минус 21:

У меня в опросе исходно 77 групп и в каждой группе по 7 вопросов. На каждый вопрос 3 подвопроса. Соответствено:

77*7*3=1617+8 служебных столбцов это то к-во, на котором limesurvey сообщает мол много столбцов при активации опроса.

Уменьшая по 1 группе от 77 .. на 74 я смог активировать опрос.

74*7*3=1554+8 служебных - то к-во на котором опрос активируется.

Поэтому к-во столбцов которое допускает создавать 2.72.2. limesurvey находится между 1554+8 и 1554+8+(7*3)

Точное максимальное к-во это ладно, я попозже вычислю..исходный то вопрос: что ограничивает создание таблицы на 1617+8 столбцов, Limesurvey или сама БД SQL? Это исходный вопрос..

по поводу структуры таблицы:

CREATE TABLE `lime_survey_167113` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`token` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
`submitdate` datetime DEFAULT NULL,
`lastpage` int(11) DEFAULT NULL,
`startlanguage` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL,
`startdate` datetime NOT NULL,
`datestamp` datetime NOT NULL,
`ipaddr` text COLLATE utf8mb4_unicode_ci,
`167113X613X17123SQ001` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
...
`167113X686X17640SQ003` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_survey_token_167113_13675` (`token`)
) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

поля типа:
`167113X613X17123SQ001` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL
и есть те 1617 и 1554 о которых идет речь. Поля предшествующие:

`167113X613X17123SQ001` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL,

и есть те самые которые я обозвал служебными.
Last Edit: 1 month 5 hours ago by shiva522.

Please Log in or Create an account to join the conversation.

More
4 weeks 29 minutes ago #166141 by ddrmoscow
ddrmoscow replied the topic: Максимальное к-во вопросов в опросе?
про уточнения: я спрашивал какие типы вопросов используются в этих 77 *7 вопросах? для разных типов вопросов / подвопросов создается разное количество столбцов ответов , разных типов.
Например для вопроса с одиночным выбором создается 1 колонка , а для вопроса с множественным выбором создается N колонок = N подвопросов. + колонка "другое", если требуется.

Про подсчеты : для varchar(5) требуется зарезервировать 5+1 байт. другие размеры можно посмотреть тут

в самой LS (v 3+) не нашел ограничений на размер строки или количество столбцов.
общие правила при создании столбцов и перевода типа полей в тип столбцов по умолчанию:
public $columnTypes=array(
		'pk' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
		'bigpk' => 'bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY',
		'string' => 'varchar(255)',
		'text' => 'text',
		'integer' => 'int(11)',
		'bigint' => 'bigint(20)',
		'float' => 'float',
		'decimal' => 'decimal',
		'datetime' => 'datetime',
		'timestamp' => 'timestamp',
		'time' => 'time',
		'date' => 'date',
		'binary' => 'blob',
		'boolean' => 'tinyint(1)',
		'money' => 'decimal(19,4)',
	);

Ограничения для столбцов Mysql описаны тут

возможно вы столкнулись с ограничением структуры файлов .frm
либо с фрагментацией динамических типов таблиц Myisam

предложение:
посмотрите свойства таблицы которую удалось создать. проверьте значения длина строки и размер строки , насколько они близки к лимиту 64кБ

попробуйте создать вручную такую-же базу, но в формате utf8 (3 байта на символ, а не 4 как в utf8mb4)
Attachments:
The following user(s) said Thank You: shiva522

Please Log in or Create an account to join the conversation.

More
3 weeks 6 days ago - 3 weeks 6 days ago #166229 by shiva522
shiva522 replied the topic: Максимальное к-во вопросов в опросе?
В общем вопрос можно считать закрытым.

Ограничения насколько я понимаю идут от самой MySql.

В Toad for mysql попробовал вручную создать таблицу взяв за основу скрипт созданной таблицы и добавив полей такого же типа и размерности (varchar(5)) до того количества где столкнулся с проблемой. Экспериментально (уменьшая к-во полей ) дошел до к-ва 1575 поля, когда таблицу дает создавать.

После, попробовал вместо varchar(5) сделать varchar(1). Результат тот же. 1575 поля - то к-во при котором смог создать таблицу.
Так что Limesurvey тут не причем.

Всем спасибо за помощь.
Last Edit: 3 weeks 6 days ago by shiva522.

Please Log in or Create an account to join the conversation.

Moderators: vipgroup

Start now!

Just create your account and start using Limesurvey today.

Register now
Join our Newsletter!