Wieso wird kein 'chr(160)' in die Datenbank geschrieben?

... komplette Frage anzeigen

2 Antworten

Schau Dir die Zeichensätze an, mit denen die verschiedenen Ebenen Deiner Web-Anwendung (Browser-Anzeige, Request-Response-Kanal zwischen Browser und Server, PHP, Kanal zwischen PHP und MySQL, MySQL-Server im Allgemeinen, MySQL-Datenbank, MySQL-Tabelle, MySQL-Spalte) arbeiten!

Nur, wenn Du eingestellt hast, dass alle Ebenen entweder mit demselben Zeichensatz arbeiten oder zumindest alle Zeichensätze, die auf dem Übertragungsweg verwendet werden, beim Austausch in alle Richtungen alle von Dir verwendeten Zeichen (also auch jenes mit Code 160) unterstützen, wirst Du diese Zeichen korrekt zu Gesicht bekommen. Wenn auch nur einer dazwischen quer schießt, kommen Fragezeichen oder ähnlicher Quark heraus.

Was da zu machen ist, hängt wesentlich vom Geschmack des Programmierers ab. Du KANNST zum Beispiel, wenn Du Dir SEHR VIEL Ärger ersparen willst, alles global auf einen Zeichensatz einstellen, den heutzutage kein System mehr nicht unterstützt (doppelte Verneinung, gelle?!). Das nennt sich generell erstmal "UTF". Und von den verschiedenen Spielarten, die es von UTF gibt, bietet sich für Europäer UTF-8 an, weil da die Low-ASCII-Zeichen, die in europäischen Sprachen die Masse aller Texte stellen, weiterhin als 1 Byte übertragen werden, also ein Maximum für dem Quotienten "Kompatibilität/Platzverbrauch" erreicht wird.

Wie man das macht: google "PHP MySQL UTF-8"!

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
31.10.2015, 15:05

Sehr schön, dass da mal ausdrücklich jemand drauf hinweist!

Ich bekomme immer Krämpfe, wenn irgendwelche Leute beim Lesen und Schreiben von Textdaten (egal ob DB oder Datei) die Kodierungen völlig ignoriert werden, und es nur durch Glück zu keinem Datensalat kommt.

Da müsste in vielen Anfängertutorials (egal welcher Programmiersprache) viel eindrücklicher drauf hingewiesen werden, dass man Text nicht "blind" irgendwo hin schreibt, oder von irgendwo liest, ohne explizit die Kodierung anzugeben, bzw. sich vorher ordentlich Gedanken darüber gemacht zu haben.

Von daher: Eine sehr sehr gute Antwort!!!

PS: Hier auf GF gab es bis vor einem halben Jahr ein ähnliches Problem, bei dem japanische Zeichen zwar als UTF-8 gespeichert, aber danach als ISO-8859-1 gelesen wurden ... deshalb war es hier zeitweise überhaupt nicht möglich, Antworten mit japanischen Wörtern zu posten! Also wie man sieht, passiert dieser "Anfängerfehler" vielen Leuten. (wobei die Codebasis von GF weiß Gott kein Glanzstück ist) :)

1

wo siehst du die "?" ? also mit was stellst du fest, was in der db drin ist?

angenommen, du hast das zeichen tatsächlich so in der datenbank - wie auch immer du diese reingeschrieben hast - dann ist das kein db-problem, sondern ein darstellungsproblem auf deiner webseite (?).

bei zeichen >127 fangen die probleme mit den verschiedenen zeichencodes an: latin-1 vs. utf8

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von waswesich
31.10.2015, 17:59

auch zu dir vielen Dank für die Antwort

mysqli->set_charset war mein Freund ;-)

0