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).