Frage

Beim Versuch, eine MySQL-basierte Anwendung zur Unterstützung von MS SQL zu machen, bin ich auf das folgende Problem gestoßen:

Ich behalte MySQLs auto_increment als vorzeichenlose Ganzzahlfelder (verschiedener Größe) bei, um den gesamten Bereich nutzen zu können, da ich weiß, dass es niemals negative Werte geben wird.MS SQL unterstützt das unsigned-Attribut nicht für alle Ganzzahltypen, daher muss ich mich entscheiden, ob ich den halben Wertebereich weglassen oder eine Problemumgehung erstellen möchte.

Ein sehr naiver Ansatz wäre, Code in den Datenbankabstraktionscode oder in eine gespeicherte Prozedur einzufügen, der zwischen negativen Werten auf der Datenbankseite und Werten aus dem größeren Teil des vorzeichenlosen Bereichs konvertiert.Dies würde natürlich die Sortierung durcheinander bringen und es würde auch nicht mit der Auto-ID-Funktion funktionieren (oder doch?).

Mir fällt keins ein Gut Gibt es derzeit eine Problemumgehung?Oder bin ich nur fanatisch und sollte die halbe Reichweite einfach vergessen?

Bearbeiten:
@Mike Woodhouse:Ja, ich schätze, du hast recht.Es gibt immer noch eine Stimme in meinem Kopf, die mir sagt, dass ich das Feld vielleicht verkleinern könnte, wenn ich seine Nutzung optimiere.Aber wenn es keine einfache Möglichkeit gibt, dies zu tun, lohnt es sich wahrscheinlich nicht, sich darüber Gedanken zu machen.

War es hilfreich?

Lösung

Wann wird das Problem voraussichtlich zu einem echten Problem?

Wie schnell rechnen Sie angesichts der aktuellen Wachstumsraten mit einem vorzeichenbehafteten Ganzzahlüberlauf in der MS SQL-Version?

Seien Sie pessimistisch.

Wie lange wird die Anwendung voraussichtlich verfügbar sein?

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

(Ich habe keine Ahnung, wie die Antworten lauten, aber ich denke, wir sollten sicher sein, dass wir wirklich ein Problem haben, bevor wir intensiver nach einer Lösung suchen.)

Andere Tipps

Ich würde die Verwendung des Datentyps BIGINT empfehlen, da dieser bis zu 9.223.372.036.854.775.807 reicht.

SQL Server unterstützt keine vorzeichenbehafteten und vorzeichenlosen Werte.

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

Fassen Sie alles zusammen, was variiert..

Sie müssen eine Abstraktionsschicht innerhalb Ihrer Datenzugriffsschicht erstellen, um sie an den Punkt zu bringen, an dem sie benötigt wird ist mir egal Unabhängig davon, ob es sich bei der Datenbank um MySQL oder MS SQL handelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top