2011-01-12 12 views
2

Die meisten Tabellen in meiner Datenbank haben Daten vom Typ varchar und die Länge ist auf 36 eingestellt, um nativ erstellte Guids zu füllen. Ist varchar der am besten geeignete Datentyp zum Speichern von GUID-Werten oder eines anderen Typs in mysql? Bitte erklären Siemysql datatypes

+3

Wie sieht Ihre GUIDs aussehen? – Tobias

Antwort

1

Das ist eine gute Frage. Ich habe an vielen Stellen gesehen, dass sie varchar für verschiedene Arten von IDs verwenden, die wie Zahlen aussehen. Warum also nicht Ganzzahl verwenden? Nun, in meiner Erfahrung gibt es drei Hauptfälle:

  1. Obwohl sie Zahl sind, könnten sie zu groß sein. Beispielsweise können Sie keine Ganzzahl (selbst die 64-Bit-Ganzzahl) für eine Zahl mit 32 Ziffern verwenden (das Maximum für eine 64-Bit-Ganzzahl ohne Vorzeichen beträgt 20 Ziffern).

  2. Einige Nummern haben spezielle Formatierungen. Eine Telefonnummer könnte beispielsweise wie folgt aussehen: +44 (12) 3456789. Offensichtlich sind die +, (, und), nicht Teil der Nummer und Sie können die Nummer ohne sie aufrufen, aber dies ist das übliche Format, so dass Sie es mit einer Integer-Variablen nicht speichern können.

  3. In Zukunft könnten Sie Ihre IDs auf Buchstaben umstellen. Es ist also eine gute Übung, Buchstaben von Anfang an zuzulassen, um zu vermeiden, später Millionen von Datensätzen ändern zu müssen.

Hoffe, dass hilft.

2

Sie möchten vielleicht PROCEDURE ANALYSE auschecken. Es kann hilfreich sein, die entsprechenden Datentypen basierend auf den bereits in der Tabelle enthaltenen Datentypen vorzuschlagen.

Hier ist eine blog post, die auch über PROZEDURANALYSE spricht und könnte auch helfen.

0

Ich meine, Varchar ermöglicht die Verwendung jedes Zeichens und verhindert typischerweise einen Überlauf wie die Anzahl der Datentypen. Also ... wenn Sie erwarten, dass Ihre GUIDs große Werte oder Werte außerhalb von numerischen Zeichen enthalten, dann sind Sie golden.

1

Wenn Ihre GUIDs immer die Länge 36 und nicht null haben, verwenden Sie CHAR statt VARCHAR. Es spart Speicherplatz, da VARCHAR für jede Zeile ein Längenpräfix speichern muss.

Wenn alle Spalten eine feste Länge haben, wird die Leistung in einigen Fällen erhöht, da die Datenbank Zeilen effizienter durchsuchen kann.

MySQL Reference Manual - The CHAR and VARCHAR Types

1

Es hängt alles davon ab, was Sie unter „am besten geeigneten“.

Die Vorteile von varchar (36) sind Einfachheit. Sie können die GUID so wie sie ist speichern und sie einfach zurücklesen.

Aber wenn Sie sind besorgt über die Menge an Speicherplatz, dass die Säule in Anspruch nimmt, dann haben Sie ein paar Möglichkeiten:

varchar (36) = 37 Bytes char (36) = 36 Bytes char (32) = 32 Bytes (entfernen Sie einfach die Bindestriche) binary (16) = 16 Bytes (entfernen Sie die Bindestriche und entpacken Sie die GUID, um eine binäre Zeichenkette zu erhalten)

So, wenn Sie über Speicherplatz besorgt sind, werden Sie diese binäre finden (16) ist viel besser als varchar (36).

Hier ist ein Beispiel des Erhaltens einen binären (16) String aus einer GUID in MySQL:

unhex(replace(uuid(),'-',''))