2017-05-07 4 views
0

Ich verliere meine Meinung zu diesem Thema seit gestern.Wie setze ich utf8mb4 auf MySQL richtig?

Ich versuche, meine MySQL-Datenbank von utf8 zu utf8mb4 zu konvertieren. Um dies zu tun, folgte ich diese Seiten/Themen: https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4, Cannot store emoji in database, Change MySQL default character set to UTF-8 in my.cnf? usw.

Meine Datenbank scheint utf8mb4_unicode_ci collation wie erwartet zu haben, und alle zu ihren Tischen.

Dennoch, wenn ich SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; gehe ich erhalten:

#With a Root access 
Variable_name    Value 
character_set_client  utf8    #expecting utf8mb4 
character_set_connection utf8    #expecting utf8mb4 
character_set_database  utf8mb4    #good 
character_set_filesystem binary    #good 
character_set_results  utf8    #expecting utf8mb4 
character_set_server  utf8mb4    #good 
character_set_system  utf8    #expecting utf8mb4 
collation_connection  utf8_general_ci  #expecting utf8mb4_unicode_ci 
collation_database   utf8mb4_unicode_ci #good 
collation_server   utf8mb4_unicode_ci #good 

#With a standard user access 
Variable_name    Value 
character_set_client  utf8    #expecting utf8mb4 
character_set_connection utf8mb4    #good 
character_set_database  utf8mb4    #good 
character_set_filesystem binary    #good 
character_set_results  utf8    #expecting utf8mb4 
character_set_server  utf8mb4    #good 
character_set_system  utf8    #expecting utf8mb4 
collation_connection  utf8mb4_unicode_ci #good 
collation_database   utf8mb4_unicode_ci #good 
collation_server   utf8mb4_unicode_ci #good 

ich eine /etc/mysql/conf.d/90-my.cnf-Datei wie folgt:

[client] 
default-character-set = utf8mb4 

[mysql] 
default-character-set = utf8mb4 

[mysqld] 
character-set-client-handshake = FALSE 
character-set-server = utf8mb4 
collation-server = utf8mb4_unicode_ci 
init-connect = 'SET collation_connection = utf8mb4_unicode_ci' 
init-connect = 'SET NAMES utf8mb4' 

Meine MySQL-Version ist 5.5.54, die alle in einem debian 7.

Hat jemand einen Anhaltspunkt, um mir zu helfen?

Thx für Ihre Hilfe, und sorry für mein schlechtes Englisch ...

EDIT

Fun Tatsache: wenn ich Variablen in dem in-line-Befehl überprüfen, ich habe diese:

mysql> show variables like "%character%"; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8mb4     | 
| character_set_connection | utf8mb4     | 
| character_set_database | utf8mb4     | 
| character_set_filesystem | binary      | 
| character_set_results | utf8mb4     | 
| character_set_server  | utf8mb4     | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 

Während ich noch utf8 haben für character_set_client und character_set_results, wenn ich mit phpMyAdmin überprüfen (mit einem nicht-Superuser-Zugriff)

Antwort

0

Beim Verbinden als Benutzer root wird init-connect ignoriert.

Geben Sie Ihrer Anwendung ein eigenes Login ohneSUPER Privileg.

Wenn Sie eine Verbindung von Ihrer App aus herstellen möchten, führen Sie die sprachspezifische Methode zum Bereitstellen des Zeichensatzes aus. (Oder führen Sie SET NAMES utf8mb4 aus.) Welche App-Sprache verwenden Sie?

Falls etwas anderes nicht in Ordnung ist, finden Sie unter "Best Practice" in Trouble with utf8 characters; what I see is not what I stored

+0

Thx viel für Ihre Anliegen. Ich habe gerade den Thread bearbeitet, um Zeichen/Kollatierungskram mit einem Standardbenutzerzugriff auf die Datenbank hinzuzufügen. Die Ergebnisse sind besser, aber immer noch nicht perfekt. Ich habe einen kurzen Blick auf Ihren verlinkten Beitrag geworfen, Mann, Ihre Erklärungen sind sehr gut. Ich werde es versuchen, sobald ich von der Arbeit komme. Ich werde dir sagen, wenn etwas funktioniert. (Btw habe ich versucht, das 'HEX (txt)' Ding und das Ergebnis ist gut, alles scheint "hex-codiert" wie erwartet.) Wie auch immer, ich halte Sie schnell in Verbindung. Thx wieder – Vae

+0

Hey Rick, hier sind die Nachrichten: Ich setze alles, was du erwähnst, in den "Was du tun sollst" Teil. Der Test der Daten ist gut (keine Doppelcodierung und jedes Zeichen wird korrekt erkannt). Mein Problem ist: Ich habe ein Fragezeichen in der Datenbank statt Emojis (aber sie sind korrekt auf meiner Website angezeigt). Sie haben geschrieben: "Die zu speichernden Bytes sind nicht als utf8/utf8mb4 kodiert. Beheben Sie dies." Wie kann ich das beheben? FYI, ich benutze PHP. Thx wieder für Ihr Interesse. Bis bald. – Vae

+0

"Erklärungen sind sehr gut" - ich hasse es zu verwalten, wie viele Jahre ich diese Erklärungen verfeinert habe. –

Verwandte Themen