Как обойти неподдерживаемые типы целочисленных полей без знака в MS SQL?

StackOverflow https://stackoverflow.com/questions/29694

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Как долго, по вашему мнению, проживет приложение?

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top