Какова большая часть “базы данных независимый” способ создать текстовое поле переменной длины в базе данных

Я хочу создать текстовое поле в базе данных без определенного размера (это сохранит текст длины, неизвестной в некотором случае) - конкретный текст является сериализированным простым объектом (~ JSON)

Что является большей частью базы данных независимый способ сделать это: - varchar без указанного размера (не думают вся поддержка дб это) - 'текстовое' поле, это, кажется, распространено, но я не полагаю, что это - стандарт - блоб или другой объект того вида? - varchar очень большой размер (это неэффективно и тратит впустую дисковое пространство, вероятно) - Другой?

Я использую JDBC, но я хотел бы использовать что-то, что поддерживается в большей части DB (оракул, mysql, postgresql, дерби, HSQL, H2 и т.д....)

Спасибо.

8
задан Thibaut Colar 25 May 2010 в 18:32
поделиться

5 ответов

varchar очень большого размера ( это неэффективно и, вероятно, тратит впустую дисковое пространство)

Это будет наиболее переносимый вариант. Ограничьте себя до 2000 символов, и вас будет хорошо для большинства баз данных (oracle является текущим ограничителем 2000, но также будьте осторожны с старыми версиями mysql). Я бы тоже не стал слишком беспокоиться о дисковом пространстве. Большинство баз данных используют диск только для фактических данных, сохраненных в поле.

3
ответ дан 5 December 2019 в 21:17
поделиться

Используйте большой двоичный объект. API JDBC2.0 поддерживает его, поэтому любой драйвер, поддерживающий JDBC2.0 (включая J2SE 5.0), должен его поддерживать.
Преимущества BLOB:
1. Размер может достигать 4G-1 (Oracle. Другие базы данных не уверены)
2. Может хранить любые данные по вашему желанию (даже изображения, сериализованные в какое-либо поле в вашей структуре JSON)
3. Полностью нейтрален при транспортировке через ОС
4. Вы по-прежнему можете использовать индексы для ключей, которые ссылаются на большой двоичный объект, так что поиск по идентификаторам и т. Д. Необязательно должен выполняться путем доступа к структуре.

1
ответ дан 5 December 2019 в 21:17
поделиться

Используйте фреймворк, например hibernate, чтобы у вас не было проблем с поиском универсального решения. Не думаю, что в каждой упомянутой базе данных можно использовать один универсальный тип. Думаю, базы данных сильно различаются.

0
ответ дан 5 December 2019 в 21:17
поделиться

Вам действительно нужно поддерживать все шесть этих баз данных? (подсказка: нет.)

Я пришел к мнению, что написание универсально переносимого SQL DDL не стоит таких хлопот. YAGNI.

Вы должны поддерживать базы данных, которые вы используете в настоящее время, и быть готовыми адаптироваться к базе данных, которую вы примете в будущем.


По поводу вашего комментария: Единственными стандартными типами данных переменной длины в SQL являются VARCHAR и BLOB. VARCHAR предназначен для строковых данных, и его объявление включает набор символов и коллизию. BLOB предназначен для двоичных данных и не поддерживает набор символов/коллаборацию.

Другие типы данных, такие как VARCHAR(max), CLOB или TEXT являются расширениями производителя:

3
ответ дан 5 December 2019 в 21:17
поделиться

текст, возможно, лучше всего , но вскоре будет удален из SQL Server, и нет независимой от СУБД опции для всех , которые вы указали.

При этом, когда дело доходит до SQL, переносимость переоценивается. Вы с большей вероятностью измените свой клиентский код до того, как смените СУБД. Выберите один и продолжайте ...

0
ответ дан 5 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: