Сведения о вопросе

HOLY

09:55, 20th August, 2020

Теги

mysql   sql-server   database   interop    

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

Просмотров: 487   Ответов: 3

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

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

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

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

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



  Сведения об ответе

dump

22:27, 12th August, 2020

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

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

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

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

Вы все еще считаете, что Фактор 2-это то, о чем вам стоит беспокоиться?

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


  Сведения об ответе

#hash

00:28, 28th August, 2020

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

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


  Сведения об ответе

JUST___

07:47, 23rd August, 2020

Я бы сказал так.. "How do we normally deal with differences between components?"

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться