Как обойти неподдерживаемые целочисленные типы полей без знака в MS SQL? - PullRequest
1 голос
/ 27 августа 2008

Пытаясь заставить приложение на базе MySQL поддерживать MS SQL, я столкнулся со следующей проблемой:

Я сохраняю auto_increment в MySQL как целочисленные поля без знака (разных размеров), чтобы использовать полный диапазон, поскольку я знаю, что никогда не будет отрицательных значений. MS SQL не поддерживает атрибут unsigned во всех целочисленных типах, поэтому мне приходится выбирать между отсутствием половины диапазона значений или созданием обходного пути.

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

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

Edit:
@ Майк Вудхаус: Да, я думаю, ты прав. В моей голове все еще звучит голос, говорящий, что, возможно, я мог бы уменьшить размер поля, если бы оптимизировал его использование. Но если нет простого способа сделать это, вероятно, не стоит об этом беспокоиться.

Ответы [ 3 ]

1 голос
/ 27 августа 2008

Когда проблема может стать реальной?

Учитывая текущие темпы роста, как скоро вы ожидаете переполнения целых чисел со знаком в версии MS SQL?

Будьте пессимистичны.

Как долго вы ожидаете, что приложение будет жить?

Вы все еще думаете, что фактор разности 2 - это то, о чем вам следует беспокоиться?

(я понятия не имею, каковы ответы, но я думаю, мы должны быть уверены, что у нас действительно есть проблема, прежде чем искать более сложное решение)

1 голос
/ 03 сентября 2008

Я бы порекомендовал использовать тип данных BIGINT, так как он достигает 9,223,372,036,854,775,807.

SQL Server не поддерживает подписанные и неподписанные значения.

0 голосов
/ 27 августа 2008

Я бы сказал это .. "Как мы обычно имеем дело с различиями между компонентами?"

Инкапсулируйте то, что меняется ..

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...