Ich frage mich, ob das machbar wäre? Um ein Array in ein Feld in der Datenbank einzufügen.
Zum Beispiel habe ich einen Titel, ich möchte diesen Titel mit nur einer ID haben, aber er wird auf der Website zweisprachig verwendet.
Es fühlt sich ein wenig unnötig an, eine andere Tabelle mit ihren globalen IDs zu versehen und dann eine andere Tabelle mit den eigentlichen Titeln, die mit der globalen ID verknüpft sind.
Ich möchte nur so etwas haben
%Vor%Ich benutze PHP / MSYQL, also wenn es machbar wäre, könntest du bitte in diesen Sprachen erklären.
Oh ja, ich dachte, ich könnte es funky formatieren und die Split-Funktion verwenden, um es wieder in ein Array zu verwandeln. Aber ich frage mich, ob ich es sofort als ein Array speichern könnte. Ich denke, der Benutzer könnte etwas mit der gleichen Formatierung (eins von einer Million) eingeben
es ist machbar:
%Vor%und dann zu dekodieren:
%Vor%aber wie erwähnt, verringert es wirklich die Vorteile einer Datenbank an erster Stelle. Ich würde definitiv vorschlagen, stattdessen eine Multi-Table- oder Multi-Column-Option zu betrachten, abhängig von der Anzahl der Sprachen, die Sie unterstützen möchten und ob sich diese Zahl in Zukunft ändern wird.
edit: ein guter Punkt von dcousineau (siehe Kommentare)
Manchmal wirft die serialisierte Ausgabe selbst nach dem Entweichen Zeichen in die Abfrage, die die Dinge vermasselt. Sie möchten möglicherweise Ihre serialize () in base64_encode () -Aufrufe umbrechen und dann base64_decode () verwenden, bevor Sie die Serialisierung durchführen.
angepasster Code für diese Situationen:
%Vor%Es gibt wirklich nur zwei vernünftige Möglichkeiten:
Einer anderen Tabelle beitreten
Profis: unbegrenzte Titel in unbegrenzten Sprachen
Nachteile: Join Overhead ist rechenintensiver, SQL ist geringfügig komplexer zu aktualisieren / einfügen usw.
Mehrere Spalten
zB: TITLE_EN, TITLE_NL, TITLE_DE
Profis: schnell einfügen, auswählen, etc
Nachteile: begrenzte Anzahl von Sprachen, Hinzufügen von mehr ist ein ALTER TABLE
Angesichts unserer beiden Möglichkeiten sollten Sie normalerweise die erste auswählen. Es sei denn, Sie haben nur eine obszöne Menge von Transaktionen, die nicht parallelisiert werden können, oder Sie können absolut sicher sein, dass Sie keine Sprachen hinzufügen, die zusätzliche Flexibilität im Schema-Layout wird Ihnen auf lange Sicht Kopfschmerzen ersparen.
Arrays verletzen die Normalisierung; In meiner Erfahrung mit Internationalisierungsdatenbanken habe ich festgestellt, dass die Verwendung der Phrasen normalisiert das beste Design ist,
Ich erlaube es Ihnen, einfach Großkopien von Zeilen zu erstellen - zum Beispiel 'es' zu 'es-mx' oder 'en' zu 'en-US', 'en-GB' und mein Favorit: 'xx-piglatin ". In einem Array-Schema müssten Sie entweder jeden Datensatz neu schreiben oder komplexes Parsen hinzufügen oder etwas verwenden, das komplexer ist als Arrays, wie XML.
Es ist relativ einfach, LEFT JOIN
s zu verwenden, um nicht übersetzte Phrasen für Arbeit zu finden und auch COALESCE
zu verwenden, um einen Standardwert zurückzugeben, so dass das Programm auch dann verwendbar bleibt, wenn die Phrase nicht übersetzt wird.
Verwenden Sie eine Tabelle mit 3 Spalten!
ID, TITLE_EN, TITLE_NL
Es gibt keinen guten Grund, das wirklich zu serialisieren!
Tags und Links arrays php mysql database internationalization