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

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

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

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

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
2 788
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

Ответ принят как подходящий

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

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

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

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

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

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

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

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

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