2017-10-05 6 views
0

Ich habe ein seltsames Problem mit MySQL Unterstützung Cyrilic Alphabet. Die Datenbank wurde von Anfang an in utf8_unicode_ci angelegt, die Tabellen jedoch nicht. Im Moment sieht die Tabelle Daten, wenn in cyrrilic wie folgt zur Verfügung gestellt, wenn ich eine Tabelle von Start in UTF erstellen, gibt es kein Problem, aber wenn ich versuche, die vorhandene Codierung der Tabelle mitMySql Datenbank ändern vorhandene Tabelle in UTF8

zu ändern
ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

welche vorhandenen Daten soll oder

ALTER TABLE Strategies 
    CHARACTER SET utf8, 
    COLLATE utf8_unicode_ci; 

ändern, die Zukunft Daten ändern soll, es funktioniert nicht.

Ich habe auch my.cnf ändern und hinzugefügt in

[mysqld] 
# 
#default-character-set=utf8 this one breaks mysql restart 
character-set-server=utf8 
skip-character-set-client-handshake 
collation-server=utf8_unicode_ci 
init-connect='SET NAMES utf8' 
init_connect='SET collation_connection = utf8_general_ci' 

Wenn ich SHOW VARIABLES laufen WHERE variable_name LIKE 'character_set_%' OR 'Sortierungs%' variable_name LIKE; Ich bekomme:

enter image description here

ich auch utf ändern mein Admin direkt in PHP und es zeigt tatsächlich, dass die Tabelle in utf ist aber nichts passiert mit dem bestehenden ????????? oder zu den zukünftigen kyrillischen Eingaben.

Hoffentlich hat jemand anderes diese Art von Problem erfahren, wäre wirklich toll für jede Hilfe oder Anregungen. Vielen Dank.

+0

Was erhalten Sie für ... SELECT CHARACTER_SET_NAME, COLLATION_NAME aus information_schema.Spalten wo table_schema = '' und table_name = ''. ? –

+0

Was war die * ursprüngliche * Kodierung der fraglichen Tabellen/Spalten? – Binarus

+0

Früher war es latin1_swedish_ci –

Antwort

0

Wenn eine Tabelle als beginnt LATIN1 und hat latin1-codierte Zeichen darin, verwenden ALTER TABLE ... CONVERT TO CHARACTER SET utf8 (wie du)

Vor der Konvertierung, testen Sie die alte Codierung zwei Dinge tun:

SHOW CREATE TABLE ... -- to see that the columns say latin1 
SELECT HEX(col) ... -- to see what the encoding looks like: é should show E9 

Ich sage "vorher", weil es möglich ist, utf8 falsch in latin1 zu stopfen. é sollte C3A9 zeigen - das ist "Double-Encoding".

Sie ebenfalls nach die Umwandlung:

SHOW CREATE TABLE ... -- to see that the columns say utf8 
SELECT HEX(col) ... -- to see what the encoding looks like; é should show C3A9 

C383C2A9 würde doppelt Codierung angeben. Ein Durcheinander.

Verlassen Sie sich nicht auf init-connect='SET NAMES utf8', wenn Sie als root verbinden, init-connect für root und jede andere SUPER Mitglied ignoriert wird.

Aber ... Sie sagen, Sie haben kyrillischen Text in eine Latin1-Spalte? Das ist "unmöglich", da latin1 nichts anderes als lateinische westeuropäische Zeichen darstellen kann. Also ... Du hast wahrscheinlich "Doppelcodierung".

Weitere Informationen zum Debuggen finden Sie unter Trouble with utf8. Beachten Sie insbesondere "Fragezeichen".

Um die Doppelcodierung zu reparieren, siehe Fixes, und wählen Sie den entsprechenden Fall aus. Dieser Link sagt auch, was Sie sollten getan haben (die 2-Schritt-Alter) statt, was Sie getan haben.

Verwandte Themen