2008-08-27 5 views
1

Der Versuch, eine MySQL-basierte Anwendung Unterstützung MS SQL zu machen, lief ich in das folgende Problem:Wie umgehen Sie unsigned integer Feldtypen in MS SQL?

Ich halte MySQL auto_increment als unsigned Integer-Felder (in verschiedenen Größen), um den Einsatz des gesamten Spektrums, wie ich zu machen Ich weiß, dass es niemals negative Werte geben wird. MS SQL unterstützt das Unsigned-Attribut nicht für alle Integer-Typen. Daher muss ich zwischen der Hälfte des Wertebereichs und der Umgehungslösung wählen. Ein sehr naive Ansatz wäre es, etwas Code in den Datenbank-Abstraktionscode oder in eine gespeicherte Prozedur zu schreiben, die zwischen negativen Werten auf der db-Seite und Werten aus dem grßeren Teil des vorzeichenlosen Bereichs umwandelt. Dies würde natürlich die Sortierung stören, und es würde auch nicht mit der Auto-ID-Funktion funktionieren (oder würde es das irgendwie?).

Ich kann nicht eine gute Problemumgehung gerade jetzt, gibt es irgendwelche? Oder bin ich einfach nur fanatisch und sollte die halbe Bandbreite einfach vergessen?

Bearbeiten:
@Mike Woodhouse: Ja, ich denke du hast Recht. Es ist immer noch eine Stimme in meinem Kopf, die sagt, dass ich vielleicht die Größe des Feldes reduzieren könnte, wenn ich seine Nutzung optimiere. Aber wenn es keinen einfachen Weg gibt, dies zu tun, ist es wahrscheinlich keine Mühe, sich darüber Gedanken zu machen.

Antwort

1

Wann wird das Problem wahrscheinlich ein echtes Problem werden?

Angesichts der aktuellen Wachstumsraten, wie bald erwarten Sie signierte Integer-Überlauf in der MS SQL-Version passieren?

Seien Sie pessimistisch.

Wie lange erwartest du, dass die Anwendung funktioniert?

Denken Sie immer noch, dass der Faktor 2 Unterschied etwas ist, worüber Sie sich Sorgen machen sollten?

(Ich habe keine Ahnung, was die Antworten sind, aber ich denke, wir sollten sicher sein, dass wir wirklich ein Problem haben, bevor ein härtere Suche nach einer Lösung)

0

Ich würde das sagen .. "Wie gehen wir normalerweise mit Unterschieden zwischen Komponenten um?"

Encapsulate was variiert ..

Sie benötigen eine Abstraktionsschicht innerhalb Sie Datenzugriffsschicht zu schaffen, es auf den Punkt zu kommen, wo es nicht schert, ob die Datenbank MySQL oder MS SQL ..

1

Ich würde empfehlen, den BIGINT-Datentyp wie das geht bis zu 9,223,372,036,854,775,807.

SQL Server unterstützt keine signierten und vorzeichenlosen Werte.