Большой текстовый тип данных в MySQL [закрыт]

Я пытаюсь понять, следует ли мне хранить текстовые файлы (65535 байт или меньше) в MySQL или вообще не использовать MySQL. Производительность - это первое соображение, а затем простота использования, поскольку я новичок.

Какой был бы хороший выбор типа данных, если бы я хотел использовать базу данных? Можно ли использовать VARCHAR для таких больших данных, TEXT или BLOB? Не уверен, какой.


person user1505713    schedule 01.01.2014    source источник
comment
Для чего вы будете использовать текстовые файлы? Искать в них или просто возвращать их как статические результаты?   -  person Joachim Isaksson    schedule 01.01.2014
comment
не могли бы вы рассмотреть возможность хранения файлов и просто имени файла в базе данных?   -  person dagfr    schedule 01.01.2014
comment
Я запускал статистику (ЗАПРОС всех строк) один или два раза в день.   -  person user1505713    schedule 01.01.2014
comment
возможный дубликат Должен ли я использовать тип поля больших двоичных объектов MySQL?   -  person Bill Karwin    schedule 01.01.2014


Ответы (1)


BLOB — это большой двоичный объект, который может содержать переменный объем данных. Четыре типа BLOB: TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB. Они отличаются только максимальной длиной значений, которые они могут содержать. Четыре типа TEXT: TINYTEXT, TEXT, MDIUMTEXT и LONGTEXT. Они соответствуют четырем типам BLOB и имеют одинаковую максимальную длину и требования к хранению.

Но хранение файлов в базе данных имеет некоторые преимущества и недостатки:

Преимущества:

1. Backups and switches to another server are easier to achieve
2. No need to add another method to access the files beside the database

Недостатки:

1. Accessing an image means retrieving it's bytes and maybe storing that as temporary local files and may be more complicated
2. File systems are simply faster due to lower overhead

Текст и блоб почти идентичны, главное отличие состоит в том, что при использовании блоба вы должны сами заботиться о кодировке. С другой стороны, вы будете вынуждены использовать кодировку текстового поля...

Решение за вами, большинство мнений, которые я слышал до сих пор, это хранить изображения в виде файлов; но это мнения, постарайтесь основывать свое решение на потребностях ваших проектов.

person Nidhish Krishnan    schedule 01.01.2014
comment
Я извиняюсь, а какая разница? Бинарный или обычный? С каким из них будет быстрее (не обязательно проще) работать? - person user1505713; 01.01.2014
comment
BLOB против TEXT: вы можете использовать наборы символов при использовании TEXT. - person Bill Karwin; 01.01.2014
comment
Текст и блоб почти идентичны, главное отличие состоит в том, что при использовании блоба вы должны сами заботиться о кодировке. С другой стороны, вы будете вынуждены использовать кодировку текстового поля... - person Nidhish Krishnan; 01.01.2014
comment
@BillKarwin Это будет модель веб-приложения. Итак, вы бы порекомендовали использовать TEXT, если мне нужны данные от иностранных посетителей? - person user1505713; 01.01.2014
comment
@user1505713 user1505713, если это текстовые данные, да, используйте ТЕКСТ и определите набор символов по умолчанию utf8. Я видел, как люди пытались использовать BLOB для текстовых данных, и у них возникали ужасные проблемы с преобразованием наборов символов. - person Bill Karwin; 01.01.2014
comment
Спасибо обоим! Я могу запустить этот проект прямо сейчас. - person user1505713; 01.01.2014
comment
@NidhishKrishnan, еще одна важная особенность хранения контента в большом двоичном объекте или тексте: когда вы УДАЛИТЕ строку, содержимое текста также автоматически удаляется. Если вы храните данные вне базы данных, DELETE в SQL не удаляет автоматически файлы в вашей файловой системе. Вы должны сделать это самостоятельно в качестве дополнительного шага, иначе рискуете собрать много потерянных файлов. Также вы можете рассчитывать на поддержку транзакций, включая откаты и ACID, если вы храните свои данные внутри базы данных. - person Bill Karwin; 01.01.2014
comment
да....... @BillKarwin ты прав......... - person Nidhish Krishnan; 01.01.2014