2016-07-15 18 views
1

Benutzung von MySQL, ich habe meine Verbindung charset auf UTF-8 gesetzt:Sind INSERT-Werte mit SET NAMES, SET CHARACTER SET?

SET NAMES 'utf8mb4'; 
SET CHARACTER SET 'utf8mb4'; 

Auf diese Weise erhalte ich alles zurück, was als UTF-8, auch für die Tabellen, die eine latin1_swedish_ci Sortierungs haben (es gibt ein paar).

Wenn ich UTF-8 INSERT-Zeichenfolgen zum Einfügen in eine der latin1-Tabellen senden, werden die Werte in latin1 codiert?

Antwort

1

Erste Präferenz: Verwenden Sie den programmiersprachenspezifischen Verbindungsparameter für 'charset'.

Zweite Präferenz: SET NAMES utf8mb4; - (keine Angabe erforderlich).

Die CHARACTER SET auf der Spalte/Tabelle ist unabhängig dieser Verbindung/SET NAMES.

Die Verbindung/SET NAMES deklariert, welche Codierung für die Bytes im Client verwendet wird. INSERT/SELECT wird zwischen dieser und der Spalte/Tabelle-Deklaration konvertieren, daher Ihre utf8-latin1 Beobachtung.

"Wenn ich UTF-8-INSERT-Zeichenfolgen zum Einfügen in eine der latin1-Tabellen sende, werden die Werte nach latin1 codiert?" - Um zu wiederholen, müssen die von Ihnen gesendeten Bytes entsprechend SET NAMES kodieren. Sie werden, wenn möglich, korrekt in latin1 in der Tabelle konvertiert. Ich sage "wenn möglich", weil Chinesisch, Emoticons usw. nicht zu latin1 konvertiert werden können, da latin1 nur eine sehr begrenzte Menge an Zeichen verarbeitet (nur genug für Westeuropa).