Zeichensatz zwischen PHP und MySQL

8

Ich bin jetzt etwas verwirrt Ich habe eine PDO-Verbindung mit charset=utf8 und die Datenbank verwendet latin .

Was bedeutet das?

Mein Gedanke ist, dass jede Verbindung, die von PHP entweder gesendet oder von der DB empfangen wird, in utf8 kodiert ist. Allerdings habe ich viel gelesen, dass die DB auch den gleichen Zeichensatz wie PHP verwenden sollte.

Kann irgendjemand bitte im Detail die Rolle des Zeichensatzes in PHP und in MySQL DB erklären und welchen Nutzen bringt es, sie auszurichten?

    
moawaya 25.12.2015, 09:45
quelle

1 Antwort

2

Sagen wir, PHP sendet etwas Text an MySQL, um es zu speichern, etwa

%Vor%

Die grundlegende Absicht dieser Abfrage besteht darin, MySQL zu sagen, dass es die Zeichenfolge speichern soll. Der schnelle braune Fuchs springt über den faulen Hund in die Datenbank.

Wenn PHP für die Verwendung von UTF-8 konfiguriert ist, bedeutet dies, dass beim Konvertieren der von Menschen lesbaren Zeichen in Binärdateien - um sie an MySQL zu übertragen - die Zeichen mithilfe des UTF-8-Codierungssystems konvertiert werden MySQL kann in UTF-8 kodierte Zeichen lesen und hat daher keine Probleme zu verstehen, dass die digital kodierte Sequenz T und h und e etc bedeuten soll - in menschenlesbaren Zeichen.
Wenn MySQL zum Speichern von Daten in der Tabelle some_table mit latin1 konfiguriert ist, konvertiert beim Konvertieren die Zeichen aus ihren UTF-8-Kodierungen in die Latin1-Entsprechungen, bevor die Daten gespeichert werden Festplatte.
In diesem Fall gibt es kein Problem - weil die englischen Buchstaben sowohl durch UTF-8 als auch durch Latin1 dargestellt werden können.
Jedoch treten Probleme auf, wenn die von PHP gesendete Zeichenfolge Zeichen enthält, die nur durch UTF-8 und nicht durch Latin1 dargestellt werden können, z. ein intelligentes Zitat . Wenn MySQL versucht, das intelligente Zitat in eine digitale Form zu konvertieren, wird es nicht möglich sein - weil das Latin1 buchstäblich keine digitale Kodierung hat, die repräsentiert.
Ich bin mir nicht sicher, was der genaue Fehlermanagement-Prozess von MySQL ist, wenn er auf diese Situation trifft und ob die Situation wiederherstellbar ist, aber im Allgemeinen ist das Endergebnis, dass die zugrunde liegende Kodierung beschädigt und unbrauchbar wird Da dieses Problem nur für die Zeichen auftritt, die nicht von den beiden Systemen dargestellt werden können - und wenn 99% aller Ihrer Kommunikationen englische Zeichen enthalten, bemerken Sie möglicherweise ein Problem für eine ganze Weile nicht und selbst dann wird es nur der gelegentliche Charakter sein, Aber zu versuchen, sich zu erholen, wenn Sie Probleme bemerken, könnte frustrierend sein.

    
the_velour_fog 25.12.2015, 11:55
quelle

Tags und Links