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
Antwort
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:
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).
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.
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.
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.
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.
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.
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(),'-',''))
- 1. NHibernate DataTypes - NoYes Boolean
- 2. Haskell foldr algrebraic datatypes
- 3. Hinzufügen von dataTypes zu jQuery.ajax?
- 4. C# data- types -> oracle datatypes
- 5. jQuery AJAX und Umgang mit verschiedenen dataTypes
- 6. MySQL/Speicher MySQL-Anmeldeinformationen
- 7. mysql
- 8. Mysql
- 9. Vorteile von MySQL gegenüber MySQL
- 10. mysql Fehler auf MySQL Host
- 11. MySQL phpmyadmin Alternativen (mySQL Workbench wie)
- 12. MySQL Verbindung existiert nicht | PHP & MySQL
- 13. node-mysql Rethrow nicht-MySQL-Fehler
- 14. Konfigurieren Root-MySQL-Zugriff - MySQL Logrotate
- 15. MySQL: Wie Bereich in mysql auswählen?
- 16. Mysql DATE_ADD INTERVAL mit mysql Tabellenfelder
- 17. mysql Fehler. Tabelle "mysql" "innodb_table_stats" nicht
- 18. MySQL-Handbücher im MySQL-Monitor lesen?
- 19. C++ CGI und MySQL Problem (mysql ++)
- 20. Größenbeschränkung einer MySQL-Abfrage ruby / mysql
- 21. mysql workbench "Verbindung zum mysql server verloren"
- 22. MySQL Roles.RemoveUserFromRole funktioniert nicht in MySQL
- 23. Mehrere mysql-Instanzen in mysql ausführen
- 24. mysql community server vs mysql installateur
- 25. ändern standand MySQL-Abfrage ‚vorbereitet‘ MySQL-Abfrage
- 26. PHP/Mysql setzt Array in mysql Db
- 27. Bild von MYSQL-Datenbank (PHP, MySql)
- 28. MySQL-Kodierungsproblem
- 29. Mysql Teilzeichenfolge
- 30. mysql Ausführungszeit
Wie sieht Ihre GUIDs aussehen? – Tobias