2016-05-01 6 views
0

Ich versuche, einen Wert zu sparen, der mit dem Währungssymbol wie in 10 vorangestellt wird. Aber wenn ich sie manuell in die DB eingebe, wird das Eurozeichen hin und wieder in? Wenn ich dann die Zeile abfrage bekomme ich mal wieder das Fragezeichen mit dem Wert und mal wieder NaN für den vollen Wert. Das Problem ändert sich, wenn ich die Zeile mit dem E-Mail-Feld oder der eindeutigen ID abfrage. Die Verwendung von $ oder ® anstelle von Euro stellt keine Probleme dar; even ™ ist jedoch dran?Lustiges Problem mit MariaDB Feld

Was ist seltsam ist, dass, wenn ich versuche, das Fragezeichen durch das Originalzeichen ersetzen, beklagt MariaDB, dass es keine Änderung in der Zeile, als ob dieser Charakter tatsächlich vorhanden wäre, auch wenn nicht gezeigt!

Ich versuchte MariaDB zu starten, nur für den Fall, aber das Problem blieb. Ich verwende UTF32 für die Codierung und utf32_unicode_ci für die Sortierung. Ich teste das Ding mit Sequel_pro, ohne php zu berühren, um Dinge nicht zu stapeln. Auf jeden Fall, wenn ich die Abfrage von einem PHP-Skript ausführen und das Ergebnis mit JSON analysieren, bekomme ich null für den Wert.

Was könnte das Problem mit diesen Sonderzeichen sein?

+0

Wenn das Werkzeug, das Sie zum Bearbeiten der Daten in der Datenbank verwenden, nicht genau so codiert ist, wie die Datenbank codiert ist, treten Probleme wie diese auf. Ist UTF-8 nicht genug für das, was Sie tun möchten? – RiggsFolly

+0

Mögliches Duplikat von http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – RiggsFolly

+0

Das andere 3d erwähnt die Möglichkeit, die Einstellungen für alle Tabellen zu ändern, aber ich habe keine Frage, wie um es in SequelPro zu machen. –

Antwort

0

Plan A: Speichern Sie die Menge als eine Zeichenfolge und tun Sie nicht versuchen Sie, den Wert daraus zu bekommen. Dies erfordert, wie bereits erwähnt, "utf8 den ganzen Weg".

Plan B: Nur die Menge in einem numerischen Feld speichern. Speichern Sie die "Währung" in einem anderen Feld als "EUR" oder "USD" oder ... Oder nehmen Sie einfach an, dass alle Beträge Euro sind. Dann legen Sie das Euro-Zeichen vor dem Betrag, wenn Sie es drucken.

Verwenden Sie nicht DOUBLE oder FLOAT, Sie erhalten eine unerwünschte zusätzliche Rundung. Betrachten Sie stattdessen DECIMAL(11,2). Das wird die Beträge in den meisten Ländern genau handhaben. (Einige Länder benötigen 4 Dezimalstellen; einige können mit 0 leben.)

Verwenden Sie nicht utf32; Verwenden Sie utf8 (oder utf8mb4).

Eine Datenbank ist ein Datenspeicher, kein Formatierungstool. Indem Sie diese Unterscheidung einhalten, vermeiden Sie Probleme wie diese.