Szczególnie myślę o niepodpisanych int
.
Oto praktyczny przykład: co robisz, gdy Twoja kolumna tożsamości osiąga maksimum? Możliwe jest przejście BigInt
(pamięć 8 bajtów zamiast 4) lub refaktoryzacja aplikacji do obsługi ujemnych liczb całkowitych, a nawet tworzenie własnych reguł, jak wskazano w tej odpowiedzi ; żadna z tych opcji nie jest optymalna.
UInt
byłoby idealnym rozwiązaniem, ale SQL Server go nie oferuje (tak jak MySQL).
Rozumiem, że niepodpisane typy danych nie są częścią standardu SQL (SQL-2003), ale nadal wydaje mi się to marnotrawstwem.
Jaki jest powód ich nieuwzględnienia (w SQL Server lub w standardzie)?
sql
sql-server
sqldatatypes
unsigned-integer
Romhein
źródło
źródło
Odpowiedzi:
Gdybym miał zgadywać, powiedziałbym, że starają się uniknąć mnożenia się typów. Ogólnie rzecz biorąc, liczba całkowita bez znaku nie może zrobić niczego, czego nie może zrobić liczba całkowita ze znakiem. Jeśli chodzi o przypadek, gdy potrzebujesz liczby między 2147483648 a 4294967296, prawdopodobnie powinieneś przejść do 8-bajtowej liczby całkowitej, ponieważ liczba ta ostatecznie również przekroczy 4294967296.
źródło
ORDER BY ABS(Id)
), Zwłaszcza jeśli kolumna jest klastrowym kluczem podstawowym. Na przykład użycie 32-bitowego uniksowego znacznika czasu jest często wygodnym sposobem na zmniejszenie o 4 bajty standardowej daty i godziny SQL.W tym celu możesz użyć -2 147 483 648 jako wartości początkowej.
źródło
Znalazłem podobne pytanie w Centrum deweloperów pakietu Microsoft Office.
Odpowiedź od Jima Hogga (menedżera programu) zawiera pewne zalety i wady dotyczące dodawania niepodpisanych int. Główną wadą jest to, że zasady implementacji niejawnych konwersji typów stają się koszmarem.
Żądanie zostało zamknięte z powodu „Nie zostanie naprawione”.
źródło
Nie obsługują słów kluczowych SIGNED i UNSIGNED, ponieważ nie są standardowe. W standardzie SQL wszystkie typy liczbowe są podpisane.
UNSIGNED (i SIGNED, co jest wartością domyślną) to rozszerzenia MySQL, które mogą być przydatne do przechowywania wyższych liczb bez znaku w tej samej ilości bajtów i nie zezwalają na liczby ujemne.
źródło