2010-11-09 1 views
2

Итак ... бывает, что я работаю над некоторым кодом, который ... в конечном итоге будет использоваться на разных серверах sql одновременно.Таблица совместимости SQL (типы данных esp)

Хотя код SQL отличается в зависимости от сервера, типы данных и столбцы отсутствуют.

Для этого мне нужно знать, какие типы данных являются общими для (по крайней мере, большинства) типов серверов sql.

В качестве отправной точки, у меня есть следующие типы:

byte, char, float, int, text, varchar, blob 

Пожалуйста, обратите внимание, что написание является весьма важным, так как имя типа данных завершится в запросе как есть (например: хотя оба Int и целые поддерживаются, мне нужен общий).

Итак, вопрос в том, знает ли кто-нибудь о диаграмме, сравнивающей совместимость между sql-серверами? Или, возможно, кто-то, кто занимался исследованиями в этой области?

Что касается смещения, я, очевидно, предвзято относится к конкретной РСУБД, поэтому нет необходимости в ответах на которые, как представляется, лучше, чем РСБМС. Давайте будем держать это сосредоточенным и по теме, хорошо?

ответ

0

Я хотел бы изучить стандартную спецификацию SQL ANSI и использовать указанные здесь типы данных. Вам может помочь книга like this.

Все они имеют хорошую документацию, поэтому я бы просто прочитал их типы данных. Вероятно, у вас будет вся информация, в которой вы нуждаетесь. only other information Я мог бы найти до этого pretty old.

Надеюсь, что это поможет.

Редактировать: Еще одна мысль ... вы можете использовать шаблон стратегии для своего SQL, так что было бы неважно, было ли это иначе, вы могли бы использовать более сложные функции. Хотя таким образом у вас будет больше работы и больше, чтобы поддерживать:/

+0

Спасибо, очень полезная информация. Что касается «шаблона стратегии», я не уверен, что следую за вами. Как в, как это было бы полезно для меня? Как и в, я уже следую этому шаблону, но некоторые типы данных могут быть исключительными для определенных СУБД (например, «blob»). – Christian

+0

Я, хотя вы можете «подключить» разные классы, чтобы использовать разные функции, например, если –

+0

Извините, кнопка ввода не работает, чтобы добавить комментарий ... подумал, что вы можете использовать его для конвертации разных возвращенных datatypes или запустить разные sql на основе класса, который вы подключаете к вашему классу dao ... см. http://www.dofactory.com/Patterns/PatternStrategy.aspx, это имеет смысл? возможно, это не то, что вы пытаетесь достичь? –

1

Я думаю, что вы в конечном итоге напишите конкретные инструкции по SQL для каждого типа сервера баз данных. Конечно.

Я был в вашей ситуации, включая намерение написать агностический код базы данных, но в конечном итоге он просто не работает. Например, одна база данных не будет обрабатывать многобайтовые строки, а другая потребует их (например, SQL Server CE), это заставит вас использовать, например, Varchar vs NVarchar на столбцах. Некоторые базы данных поддерживают многобайтовые строки, но с ужасной производительностью. Один будет использовать VARCHAR2 (Oracle), и все остальные будут использовать VARCHAR. Один из них будет обрабатывать BLOB один путь, в то время как другой будет делать это по-другому. Не заставляйте меня начинать с типов данных даты.

Вместо того, чтобы находить магическое подмножество языка SQL и типов данных, которое работает во всех базах данных, вам было бы разумнее искать метод/библиотеку доступа к данным, которая может скрыть различия для вас (возможно, некоторая библиотека ORM, которая позволяет вы создаете объекты БД, а также обращаетесь к ним?)

Как я уже сказал, я был (и до сих пор) в вашей ситуации поддержки нескольких баз данных, и лучшим решением для меня является создание оптимального кода для каждой базы данных , вместо того, чтобы пытаться найти типы данных SQL и код, который работает во всех них (я был не в состоянии, а не на удовлетворительном уровне).

Кроме того, вы сможете выжать больше производительности из каждой БД, если вы создаете отдельный текст SQL для каждой базы данных (т. Е. Параметры производительности, которые вы можете указать при создании таблицы Oracle, которая вообще не применяется, когда создание таблицы в любой другой базе данных).

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

+0

На самом деле, я пишу библиотеку ORM;) – Christian

+0

Во всяком случае проблема (как я уже говорил выше) - это типы данных. Операторы SQL получают предварительную обработку в зависимости от библиотеки. Мне просто нужно знать основные типы данных. Кроме того, поскольку это PHP, передающий инструкцию sql, я не могу беспокоиться о мультибайте (это всегда те же самые строки, которые я передаю). – Christian

+0

@ Христианин, если вы тот, кто пишет ОРМ, тогда вам нужно сделать тяжелый подъем. Узнайте сами, какие типы лучше всего. Вы пытаетесь вырезать угол, ища диаграмму, которая дает вам все ответы. Я хочу сказать, что это не так просто. И моя точка зрения на несколько байтов - это не то, нужно вам это или нет, а вопрос о том, поддерживается ли это или нет в целевой базе данных. –

Смежные вопросы