вопрос о веб-приложении, использующем PHP7.1, Silverstripe 3.6.0 и MySQL. Приложение размещено на провайдере PaaS. Поэтому у меня нет прямого доступа к базе данных и я не могу настроить InnoDB, как предлагает сообщение об ошибке.
У меня есть пользовательский DataObject с множеством полей. При попытке сохранить возвращается странная ошибка:
Не удалось выполнить запрос: [... большой запрос на обновление здесь ...] Слишком большой размер строки (> 8126). Может помочь изменение некоторых столбцов на TEXT или BLOB или использование ROW_FORMAT = DYNAMIC или ROW_FORMAT = COMPRESSED. В текущем формате строки префикс BLOB размером 768 байт хранится в строке.
Здесь вы найдете сокращенную версию моего класса:
class APIPersonResource extends DataObject {
private static $db = array(
'ResourceID' => 'Int',
'Firstname' => 'Varchar(255)',
'Lastname' => 'Varchar(255)',
'Salutation' => 'Varchar(255)',
'Email' => 'Varchar(255)',
'HomepageLink' => 'Text',
'PhoneNo' => 'Varchar(255)',
'Info' => 'HTMLText',
'IsResponsible' => 'Boolean',
'ResponsibleDescription' => 'Varchar(255)',
'ShortBio' => 'HTMLText',
'RoomNo' => 'Varchar',
'IsActive' => 'Boolean',
'IsAcademic' => 'Boolean',
'HasImage' => 'Boolean',
'HasLinksSection' => 'Boolean',
'HasCv' => 'Boolean',
'HasPublications' => 'Boolean',
'HasOfficeHours' => 'Boolean',
'AreaOfFocus' => 'Varchar(64)',
'OleLink' => 'Text',
'ReserveCollectionLink' => 'Text',
'ResearchAreas' => 'HTMLText',
'APIDepartmentResourceID' => 'Int',
'APIAddressResourceID' => 'Int',
'APIDegreeResourceID' => 'Int'
);
}
ShortBio
, AreaOfFocus
, ResearchAreas
и Info
- все поля пользовательского ввода, которые могут стать очень длинными. Странно то, что эти поля имеют тип HTMLText
, а в таблице базы данных столбцы имеют тип mediumtext
:
MariaDB [leonixyz]> describe APIPersonResource;
+------------------------------+---------------------------------------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------------------+---------------------------------------------------+------+-----+-------------------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| ClassName | enum('APIPersonResource','APIPhdStudentResource') | YES | MUL | APIPersonResource | |
| LastEdited | datetime | YES | | NULL | |
| Created | datetime | YES | | NULL | |
| Salutation_en_US | varchar(255) | YES | | NULL | |
| Salutation_de_DE | varchar(255) | YES | | NULL | |
| Salutation_it_IT | varchar(255) | YES | | NULL | |
| ResponsibleDescription_en_US | varchar(255) | YES | | NULL | |
| ResponsibleDescription_de_DE | varchar(255) | YES | | NULL | |
| ResponsibleDescription_it_IT | varchar(255) | YES | | NULL | |
| ShortBio_en_US | mediumtext | YES | | NULL | |
| ShortBio_de_DE | mediumtext | YES | | NULL | |
| ShortBio_it_IT | mediumtext | YES | | NULL | |
| ResourceID | int(11) | NO | | 0 | |
| Firstname | varchar(255) | YES | | NULL | |
| Lastname | varchar(255) | YES | | NULL | |
| Salutation | varchar(255) | YES | | NULL | |
| Email | varchar(255) | YES | | NULL | |
| PhoneNo | varchar(255) | YES | | NULL | |
| IsResponsible | tinyint(1) unsigned | NO | | 0 | |
| ResponsibleDescription | varchar(255) | YES | | NULL | |
| ShortBio | mediumtext | YES | | NULL | |
| IsActive | tinyint(1) unsigned | NO | | 0 | |
| HasActiveContract | tinyint(1) unsigned | NO | | 0 | |
| APIDepartmentResourceID | int(11) | NO | | 0 | |
| RoomNo | varchar(50) | YES | | NULL | |
| HasImage | tinyint(1) unsigned | NO | | 0 | |
| HasCv | tinyint(1) unsigned | NO | | 0 | |
| HasPublications | tinyint(1) unsigned | NO | | 0 | |
| APIAddressResourceID | int(11) | NO | | 0 | |
| AreaOfFocus_en_US | varchar(64) | YES | | NULL | |
| AreaOfFocus_de_DE | varchar(64) | YES | | NULL | |
| AreaOfFocus_it_IT | varchar(64) | YES | | NULL | |
| AreaOfFocus | varchar(64) | YES | | NULL | |
| HomepageLink | mediumtext | YES | | NULL | |
| Info_en_US | mediumtext | YES | | NULL | |
| Info_de_DE | mediumtext | YES | | NULL | |
| Info_it_IT | mediumtext | YES | | NULL | |
| ResearchAreas_en_US | mediumtext | YES | | NULL | |
| ResearchAreas_de_DE | mediumtext | YES | | NULL | |
| ResearchAreas_it_IT | mediumtext | YES | | NULL | |
| Info | mediumtext | YES | | NULL | |
| HasLinksSection | tinyint(1) unsigned | NO | | 0 | |
| HasOfficeHours | tinyint(1) unsigned | NO | | 0 | |
| OleLink | mediumtext | YES | | NULL | |
| ReserveCollectionLink | mediumtext | YES | | NULL | |
| ResearchAreas | mediumtext | YES | | NULL | |
| APIDegreeResourceID | int(11) | NO | | 0 | |
| IsAcademic | tinyint(1) unsigned | NO | | 0 | |
+------------------------------+---------------------------------------------------+------+-----+-------------------+----------------+
Есть ли способ решить эту проблему, не разбивая мой объект на части?
Заранее спасибо