UTF8 MySQL-Probleme auf Rails - Probleme mit utf8_general_ci
Habe ich eine staging-Rails-Website, die läuft über MySQL 5.0.32-Debian.
Auf diese bestimmte Website, die alle meine Tabellen sind mit utf8 /utf8_general_ci
Codierung.
Innen, die Datenbank habe ich einige Daten, die sieht so aus:
mysql> select * from currency_types limit 1,10;
+------+-----------------+---------+
| code | name | symbol |
+------+-----------------+---------+
| CAD | Canadian Dollar | $ |
| CNY | Chinese Yuan | å…ƒ |
| EUR | Euro | € |
| GBP | Pound | £ |
| INR | Indian Rupees | ₨ |
| JPY | Yen | ¥ |
| MXN | Mexican Peso | $ |
| USD | US Dollar | $ |
| PHP | Philippine Peso | ₱ |
| DKK | Denmark Kroner | kr |
+------+-----------------+---------+
Hier ist das Problem, das ich habe
Auf Inszenierung (mit der db und Schienen Website läuft auf dem debian-box), das Zeichen für Symbole werden nicht richtig angezeigt, wenn aus den Schienen. Zum Beispiel, der chinesische Yuan ist, erscheint 元 in meinem browser, nicht, å...ƒ wie zeigt es in der Datenbank.
Wenn ich zum download, die Daten auf meinem lokalen OS X-Entwicklung Computer und führen Sie die db-und Schienen lokal, sehe ich die Darstellung aus dem inneren der DB (å...ƒ) in meinem browser, nicht den Charakter 元, da sehe ich in der Inszenierung.
- Debugging hab ich gemacht
Hab ich sorgte dafür, dass alle Header für den Content-Type wieder als utf8 von jedem webserver (lokaler, staging).
Meinem lokalen mysql-server und staging-server sind beide-Installation mit utf8 als default charset. Ich bin mit "set names 'utf8'", bevor ich Anrufe.
Kann ich auch eine Verbindung zu meinem staging-db von meinem OS-X-Rails-host, und ich sehe immer noch die Zeichen å...ƒ Vertretung des yuan. Ich vermute dann, vielleicht gibt es ein Problem mit meinem lokalen mysql-client, aber ich kann nicht herausfinden, was das Problem ist.
Vielleicht verleihen eine Ahnung
Zu machen, noch mehr verwirrend, wenn ich paste das Zeichen 元 in der db auf meinem lokalen Rechner, ich sehe, dass in den web-browser in Ordnung. --- ABER wenn ich einfügen, dass dasselbe Zeichen in meiner Inszenierung db, erhalte ich eine ? markieren Sie in ihm Platz auf der Seite aus meiner Inszenierung Schienen Website.
Auch lokal auf meinem OS X-Schienen-Maschine, wenn ich "set names 'latin1'", bevor meine Abfragen, die Charaktere kommen alle wieder richtig. Ich habe diese Tabellen als latin1 vor - könnte das das Problem sein?
Jemand bitte helfen Sie mir hier, ich werde verrückt versuchen, herauszufinden, was falsch ist.
InformationsquelleAutor der Frage Subimage | 2008-12-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
AHA! Scheint, ich hatte einige Tabelle kodierten Daten in der latin1 vor, und dummerweise änderte sich die Datenbanken auf utf8 ohne Sie zu konvertieren.
Ausführen der folgenden fest, dass currency_types Tabelle:
Jetzt muss ich nur noch sicherstellen, dass die anderen Inhalte generiert, nachdem die latin1 - > utf8-Schalter nicht Durcheinander durch, dass 🙁
InformationsquelleAutor der Antwort Subimage
Haben Sie diese beiden Zeilen in Ihre
database.yml
unter der richtigen Rubrik?InformationsquelleAutor der Antwort Can Berk Güder
Sie sollten "encoding: utf8" in "config/database.yml" für die MySQL-Datenbank.
Sie sollten "$KCODE = "u'" in "config/environment.rb" für die ruby-Umgebung.
InformationsquelleAutor der Antwort yrcjaya
Weiterer einfacher Ansatz ist, um die encode-Typ mit
SQL
Alter-Anweisung. Sie können dies anhand der folgenden bash-Skript.geschönt
InformationsquelleAutor der Antwort RameshVel
Meine DB war bereits standardmäßig auf utf8, aber ich hatte das gleiche problem.
Auch nach dem hinzufügen der folgenden üblichen meta-tag, das problem war immer noch da:
Dann habe ich eine dedizierte
connection.php
um sicherzustellen, dass alle Kommunikation mit MySQL eingestellt ist auf charset utf8. Beachten Sie, dass es keine-
in utf8 inmysqli_set_charset($bd, 'utf8')
!Hier ist mein
Connection.php
:Einem anderen php-Datei:
InformationsquelleAutor der Antwort mak arthur
Für die Schienen führen Sie den folgenden code-snippet in die rails-Konsole. Es generiert eine sql für alle Tabellen. Dann loggen Sie sich in mysql und ausführen kopiert sql aus der rails-Konsole. Es wird ändern Sie alle Tabellen der Codierung.
InformationsquelleAutor der Antwort Rokibul Hasan
Können Sie erzeugen, einer migration, die Schienen Weg, um die Sortierung zu ändern geben Sie auf Ihre Datenbanken:
Dann können Sie die generierte Datei und einfügen:
Und führen Sie die migration:
Können Sie erzwingen auch die neue Sortierung auf Ihre Datenbank.yml:
Weitere Informationen zu Schienen-Migrationen:
http://edgeguides.rubyonrails.org/active_record_migrations.html
Weitere Informationen zur Sortierung Typen:
http://collation-charts.org/
InformationsquelleAutor der Antwort mauriciomdea