Каков самый "независимый от базы данных" способ создания текстового поля переменной длины в базе данных

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

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

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

спасибо.

5 ответов


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

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


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

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

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


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

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


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


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


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

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