Пытаясь заставить приложение на основе MySQL поддерживать MS SQL, я столкнулся со следующей проблемой:
Я сохраняю MySQL auto_increment как целочисленные поля без знака (различных размеров), чтобы использовать весь диапазон, поскольку я знаю, что отрицательных значений никогда не будет. MS SQL не поддерживает атрибут unsigned для всех целочисленных типов, поэтому мне приходится выбирать между отказом от половины диапазона значений или созданием некоторого обходного пути.
Один очень наивный подход заключался бы в том, чтобы поместить некоторый код в код абстракции базы данных или в хранимую процедуру, которая преобразует отрицательные значения на стороне db и значения из большей части беззнакового диапазона. Это, конечно, испортит сортировку, а также не будет работать с функцией автоматической идентификации (или как-то так?).
Я не могу сейчас придумать обходной путь хороший, есть ли он? Или я просто фанатик и должен просто забыть про половину диапазона?
Обновлено:
@ Майк Вудхаус: Думаю, ты прав. В моей голове все еще звучит голос, говорящий, что, возможно, я смогу уменьшить размер поля, если я оптимизирую его использование. Но если нет простого способа сделать это, вероятно, не стоит об этом беспокоиться.






Я бы сказал так ... "Как мы обычно справляемся с различиями между компонентами?"
Инкапсулируйте то, что меняется ..
Вам необходимо создать уровень абстракции внутри вашего уровня доступа к данным, чтобы довести его до точки, где будет все равно, независимо от того, является ли база данных MySQL или MS SQL.
Когда проблема может стать реальной?
Учитывая текущие темпы роста, как скоро, по вашему мнению, произойдет целочисленное переполнение со знаком в версии MS SQL?
Будьте пессимистичны.
Как долго вы ожидаете, что приложение будет жить?
Вы все еще думаете, что разница в два раза - это то, о чем вам следует беспокоиться?
(Я понятия не имею, каковы ответы, но я думаю, мы должны быть уверены, что у нас действительно есть проблема, прежде чем искать какое-либо более сложное решение)
Я бы рекомендовал использовать тип данных BIGINT, так как он составляет 9 223 372 036 854 775 807.
SQL Server не поддерживает значения со знаком и без знака.