как хранить большие текстовые данные в двух таблицах с помощью ссылки id, используя mysql и переполнение стека

у меня есть база данных с таблицей, в которой один столбец — «project_stmt», в котором хранятся текстовые данные. Я установил тип данных varchar (1000), но иногда использую входной текст оператора проекта очень большой, например, 100 000 символов, в этом случае данные не сохраняются в базе данных,

Одним из решений является использование типа данных BLOB, но в этом случае я потратил много места, потому что 80% пользовательского ввода для ‘project_stmt’ будет меньше 500 символов ….. поэтому я хочу сохранить введенный пользователем текст для ‘project_stmt’ ко второй таблице с чем-то вроде назначения ссылки на данные ,,,, как я могу это сделать

CREATE TABLE projects (user_id int(11),
project_id int(11) NOT NULL AUTO_INCREMENT,
project_title varchar(25) NOT NULL,
project_stmt varchar(1000) NOT NULL,
PRIMARY KEY (`project_id`),
FOREIGN KEY (`user_id`) REFERENCES `user_info` (`user_id`)
);

1

Решение

Создать новую таблицу.

CREATE TABLE projects_blob (project_blob_id int(11) NOT NULL AUTO_INCREMENT,
project_id int(11),
project_stmt blob NOT NULL,
PRIMARY KEY (`project_blob_id`),
FOREIGN KEY (`project_id`) REFERENCES `projects` (`project_id`)
);

При вставке новых записей, проверьте длину project_stmt и, если> 1000, сделайте вставку в таблицу BLOB-объектов.
При выборе project_stmt сделайте левое соединение с этой таблицей, а вместо projects.project_stmt используйте

COALESCE(projects_blob.project_stmt, projects.project_stmt) AS project_stmt

Это должно делать свое дело

0

Другие решения

Вы можете выбрать тип данных «текст», так как вы не знаете размер входящего в проект оператора.
Или вы можете ограничить пользователя в поле ввода с помощью тега «max» (например, max = ‘1000’).

Надеюсь, что это решит вашу проблему.

0