0

Ich entwickle eine Anwendung, bei der Menschen auf der ganzen Welt eine Adresse, eine Stadt oder etwas anderes in ein Suchfeld eingeben. Dann können sie die Ergebnisse auswählen, die ihrem Ziel entsprechen. Das ausgewählte Ergebnis enthält Text aus dem Adreßkomponenten long_name.Benötige ich den utf8mb4-Zeichensatz zum Speichern der Geocodierung von address.components long_names?

einige Beispiele durch die geocoder API zurückgegeben:

"long_name" : "King's Street", 
"short_name" : "King's St", 
"types" : [ "route" ] 

"long_name" : "Newport", 
"short_name" : "Newport", 
"types" : [ "postal_town" ] 

"long_name" : "Staffordshire", 
"short_name" : "Staffordshire", 
"types" : [ "administrative_area_level_2", "political" ] 

In diesem Fall würde ich z.B. Speicher:

"King Street"

"Newport"

"Staffordshire"

in meiner Datenbank.

Dann ... diese Anwendung kann von Standorten aus allen Ländern und in möglicherweise allen offiziellen Muttersprachen in diesen Ländern speichern - von google in den "long_name" Zeichenfolgen. Beachten Sie, dass ich sowohl das Land als auch die Sprache im Geocoder einstelle, um sowohl die Karte in der Muttersprache des Benutzers anzuzeigen als auch das Ergebnis (address.components strings) in der richtigen Sprache für den Benutzer zurückzugeben .

Wer weiß, ob die address.components long_names genau gespeichert werden kann (zeichenweise), wenn UTF-8 in MySql verwendet wird (das ist ein 3-Byte UNICODE), oder wenn ich den utf8mb4-Zeichensatz (4 -Byte Unicode)?

Wenn ich den utf8mb4-Zeichensatz verwenden muss, was ist der Grund dafür? Welche Sprachen, die von Google Geocoder gespeichert werden, benötigen utf8mb4 (4-Byte) UNICODE, um beim Speichern in der Datenbank keine Zeichen-/Sprachinformationen zu verlieren?

+1

Alles, was sagt, es ist UTF-8 ist als Standard 4-Byte-UTF-8. MySQL ist die Ausnahme, dass sie anfänglich für 3 Bytes gingen. Es wird dringend empfohlen, "utf8mb4" so oft wie möglich über die 3-Byte-Version zu verwenden. [Dieser StackOverflow Beitrag] (http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) sollte Ihnen auch sehr hilfreich sein. – Martin

+0

Ich habe den Beitrag geprüft, mit dem Sie verknüpft sind. Diese Person möchte UNICODE den ganzen Weg unterstützen. Mein Ansatz ist etwas anders. Ich muss unterstützen, was ich unterstützen muss. Wenn google geocoder keine Zeichensätze zurückgibt (siehe, welcher Geocoder in address.components long_name verwendet), die 4-Byte-UTF-8 benötigen, sehe ich keinen Grund, utf8mb4-Zeichensatz zu verwenden, da das einzige Ergebnis sein wird: a) viel mehr Daten in der Datenbank b) größere Indizes , die wiederum zu langsameren Abfragen und mehr Ressourcen auf dem Server führen. Gibt es eine Dokumentation, die zeigt, welche char-sets Geocoder verwendet? – bongobongo

+0

Wenn ich diese Wahl ausführen würde, würde ich immer 'utf8mb4' wählen, weil die Verwendung eines anderen 'UTF8_' MySQL-Zeichensatzes einfach darauf wartet, dass das gleiche Problem zurückkommt und Sie an einem anderen Tag beißt. Ich habe keine Ahnung, was Geocoder verwendet, aber UTF8 ist jetzt ein defacto Web Standard Zeichensatz. Und die Größe von Datensätzen (sofern sie nicht wirklich massiv sind) wirkt sich nicht auf Indizes oder Datenabrufgeschwindigkeiten aus. MySQL ist gut bis zu Milliarden von Datenzeilen. – Martin

Antwort

0

Die Kommentare implizieren, dass die eigentliche Frage über die Größe ist von 3-Byte utf8 und 4-Byte-utf8mb4. ? (Ich nehme an, Sie verwenden VARCHAR oder TEXT

  • Für Englisch, gibt es keinen Unterschied - jedes Zeichen nimmt 1 Byte in entweder utf8 oder utf8mb4 Weder die Größe noch die Codierung unterscheidet
  • .. Für Europa gibt es keinen Unterschied - jedes Zeichen benötigt 1 oder 2 Bytes
  • Für die meisten Sprachen Asiens gibt es keinen Unterschied - jedes Zeichen benötigt genau 3 Bytes
  • Für Chinesen gibt es a Problem - Einige Chinesisch Zeichen benötigen 4 Bytes, das Speichern solcher Daten in einer utf8 Spalte führt zu Kürzungen oder anderen Fehlern.

Also, Sie können auch utf8mb4 für alles verwenden.

Zu jeder Anwendung außer MySQL bezieht sich "UTF-8" auf die Codierung mit variabler Länge; es kann sogar länger als 4 Bytes sein (obwohl keinem Zeichen bisher Codes mit mehr als 4 Bytes zugewiesen wurden).

1

Wenn Ihre Anwendung ein Greenfield-Job (eine neue Anwendung) ist und Sie eine neuere Version von MySQL oder MariaDb verwenden, sollten Sie utf8mb4 verwenden. Es behandelt alles in Unicode, einschließlich einiger obskurer Zeichensätze, und Sie müssen diese Frage nicht noch einmal überlegen.

+0

Schätzen Sie die schnelle Antwort. Aber um meine Frage weiter einzuschränken: Verwendet eine der verwendeten lencade_des_Adressen.components long_name aus dem Geocoder Zeichen, die mehr als 3-Byte-UTF8 benötigen? Wenn das der Fall ist, welche Sprachen insbesondere (von Google Geocoder zurückgegeben) veranlasst mich, ein 4-Byte-UTF8 zu verwenden? Der Grund, warum ich frage, ist ganz einfach. Es werden viele Daten in die Datenbank geschrieben, und ich möchte so wenig DB-Speicherplatz wie möglich verwenden. Und wenn ich mit 3-Byte-UTF8 durchkommen kann, dann sind meine Indizes auch kleiner, und die Dinge werden wahrscheinlich auch schneller abfragen. – bongobongo

+0

Nur Google Maps Personen kennen die Antwort auf Ihre Frage. Wenn Sie genügend Informationen sammeln, um etwas zu bewirken, haben Sie wahrscheinlich bereits für den kommerziellen Zugriff bezahlt. Bitten Sie Ihren Google-Kundenbetreuer, sich für Sie zu informieren. Wenn Sie nicht für den Zugriff bezahlt haben, werden sie Ihr Scraping drosseln, und die Festplattenpreise werden sinken, bevor Sie die geringste Auswirkung davon sehen. –