mysql - Wie speichern -
Immer wenn ich versuche zu speichern ñ
es wird ?
in der mysql-Datenbank. Nach einigen wenigen Messungen ist es vorgeschlagen, dass ich meine jsp-Zeichensatz UTF-8
. Für einige Gründe, warum ich zu bleiben ISO-8859-1
. Meine Datenbank-Tabelle Codierung ist latin1
. Wie kann ich dieses Problem beheben? Bitte helfen Sie.
Ihre Tabelle ändern Kodierung UTF
Wenn Sie den Wert abrufen, ist noch
Wenn ich meine Datenbank-Tabelle zeigt es ?
Welches Betriebssystem ist MySQL installiert?
Ubuntu 12.04
Wenn Sie den Wert abrufen, ist noch
?
oder druckt es als ñ
? Es kann ein charset-problem des Programms, das Sie verwenden, um die Ansicht der Datenbank, aber nicht ein problem für Ihre Anwendung.Wenn ich meine Datenbank-Tabelle zeigt es ?
Welches Betriebssystem ist MySQL installiert?
Ubuntu 12.04
InformationsquelleAutor TheOnlyIdiot | 2012-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehen Sie zu Ihrem Datenbank-administration mit
MySQL WorkBench
zum Beispiel, setzen Sie den Motor aufInnoDB
und die Sortierung aufutf8-utf8_general_ci
.InformationsquelleAutor mram888
Geben Sie an, in Ihre Frage, benötigen Sie eine ISO-8859-1 backend (latin1), und eine Unicode - (UTF-8) frontend. Dieses setup ist zum verrückt werden, da der Satz auf dem frontend ist viel größer als das erlaubte in der Datenbank. Die vernünftigste Sache wäre die Verwendung der gleichen Kodierung durch die software-Stacks, aber auch die Verwendung von Unicode nur für die Lagerung Sinn machen würde.
Wie Sie wissen sollten, ein String ist ein menschlicher Begriff für eine Abfolge von Zeichen. In computer-Programmen, ein String ist nicht: es kann sein angesehen als eine Sequenz von Zeichen, aber es ist wirklich ein paar Daten Struktur: einen stream von bytes und eine Codierung.
Sobald Sie verstehen, dass die übergabe eines String ist wirklich vorbei bytes und einen Plan, mal sehen, wer sendet was:
Content-Type
. Wenn Sie fehlt, wird der server-pick basierend auf seine eigene Strategie, zum Beispiel standardmäßig auf ISO-8859-1 oder eine Konfigurations-parameter)character_set_server
Systemvariablen, die möglicherweise nicht durch diecharacterEncoding
Verbindung parameter)Zu verstehen, wo das problem liegt, erst sicherstellen, dass die Spalte wirklich als gespeichert latin1:
Dann schreiben Sie den Java-string bekommen Sie von der Anfrage über eine log-Datei:
Und schließlich zu sehen, was tatsächlich ist in der Spalte:
Zu diesem Zeitpunkt werden Sie über genügend Informationen, um das problem zu verstehen. Wenn es wirklich ein Fragezeichen (und nicht eine Ersatz-Charakter) dürfte es MySQL versucht zu transkodieren, ein Charakter aus einer größeren Menge (sagen wir mal Unicode) zu einem schmaleren eine, die nicht enthalten es. Das merkwürdige hier ist, dass - gehört beiden ISO-8859-1 (0xF1, dezimal 241) und Unicode (U+00F1), so würde es scheinen, wie es gibt eine Dritte charset (vielleicht ein Zeichensatz?) eingebunden in die Runde Reise.
Mehr Informationen können helfen (Betriebssystem, HTTP-server, MySQL-version)
InformationsquelleAutor Raffaele
Ändern Sie Ihre db-Tabelle, content-encoding auf UTF-8
Hier ist der Befehl für den gesamten DB-Konvertierung
- Und dies ist für einzelne Tabellen Umrechnung
Hallo, hast du dieses Problem beheben, ich habe die gleiche situation.
Ich bin nicht der OP
InformationsquelleAutor DonCallisto
ändern Sie Ihre Tabelle Sortieren zu
utf8_spanish_ci
wo
ñ
ist nicht gleichn
aber wenn Sie möchten, dass beide Zeichen gleich sein, verwenden Sieutf8_general_ci
stattInformationsquelleAutor John Woo
Ich versuche mehrere Kombinationen, aber diese funktioniert bei mir:
VARCHAR(255) BINARY CHARACTER SET utf8 COLLATE utf8_bin
Wenn Daten abgerufen werden dbforge express, zeigt wie:
NIÃ ' A
aber in der Anwendung zeigt sich wie:
NIÑA
InformationsquelleAutor Crashman
Ich hatte das gleiche problem. Fand heraus, dass ist nicht ein Problem mit der Kodierung UTF-8 oder was auch immer-Zeichensatz. Ich importierte meine Daten von windows-ANSI und alle meine Ñ und Ñ wo setzen Sie in der Datenbank perfekt wie es sein sollte. Beispiel letzten Namen zeigte auf Datenbank last_name = "MUÑOZ". Ich war in der Lage, wählen Sie normalerweise aus der Datenbank mit Abfrage Select * from Datenbank where last_name LIKE "%muñoz%" und phpmyadmin zeigt mir die Ergebnisse in Ordnung. Es wählte alle "MUÑOZ" und "MUNOZ" ohne ein problem. Also phpmyadmin zeigt alle meine Ñ und Ñ ohne Probleme.
Das problem war das Programm selbst. Alle meine Charaktere erwähnen, die zeigten, wie Sie es beschreiben mit dem funky "MU�OZ" Fragezeichen. Ich hatte befolgen Sie alle Ratschläge überall. Mein Header richtig und habe versucht, alle meine charsets zur Verfügung. Auch verwendet google-Schriftarten und beliebiger Schrift korrekt anzuzeigen, sind die letzten Namen, aber kein Erfolg.
Dann erinnerte ich mich an ein altes Programm, das in der Lage war, den trick zu tun, hin und her transparent und spähte in den code, um es herauszufinden: Die Datenbank selbst, das zeigen alle meine Sonderzeichen war das problem. Denken Sie daran, ich habe mit windows ANSI-Kodierung. Phpmyadmin hat, wie erwartet, hochgeladen, alles wie beschrieben.
Dem alten Programm behob dieses problem übersetzen - seine UNICODE-HTML-Entity:
Ñ
(siehe chart hier https://www.compart.com/en/unicode/U+00D1 ) ein Prozess gemacht, hin und her von MySQL zur app.So dass Sie nur brauchen, um Ihre Datenbank strings mit den Buchstaben Ñ und Ñ den entsprechenden UNICODE zu reflektieren korrekt auf Ihrem browser mit UTF-Zeichensatz.
In meinem Fall, ich löste meine Probleme austauschen alle meine Ñ und Ñ für Ihre entsprechenden UNICODE in all den letzten Namen in meiner Datenbank.
Nun, ich bin in der Lage, anzeigen, durchsuchen, Suche auch alle meine richtigen Nachnamen und Akzente/Tilden, richtige Spanische Sprache. Ich hoffe, das hilft. Es war ein Schmerz, um es herauszufinden, aber ein altes Programm das problem gelöst. Beste Grüße und happy coding !
Auch seine dauerhaft gelöst auf goverment-Datenbanken in Südamerika. Wir haben das Problem und das ist, wie wir es gelöst hier. mit Ihren UNICODE-HTML-Entity. Wir können insert -, delete -, update -, und alle Funktionen von MySQL. Kein problem, das Programm macht es transparent.
Oh, keine Sorge, ich habe Menschen gesehen, die Verwendung von HTML-entities anstelle der Festsetzung Kodierung viel Zeit. Es kann wohl auch funktionieren, für eine Weile. Aber dann kommt jemand mit einem anderen Sonderzeichen, und was dann, Sie wiederholen alle diese mit den neuen speziellen Charakter? Hinzufügen mehr Ausnahmen überall zu berücksichtigen, für alle edge-cases? Das ist es, was ich meine mit "nicht haltbar"; es ist nicht eine langfristig tragfähige Lösung, es Bedarf der Pflege. Die Festsetzung der Codierung richtig ist, würde das problem lösen, ohne die Notwendigkeit, es wieder zu beheben, jeden jetzt und dann.
Ich nicht, erstellen Sie die Ausnahmen, das Programm macht es automatisch mit unseren begrenzten Satz von funki Zeichen. Sie sind nicht viele, á, é, í, ó, ú, Ihre Hauptstädte, ñ und ñ sind das problem diejenigen. Sehr selten Diärese verwendet werden, ü, Ü. Das ist alle übersetzungen benötigt für unsere Nachnamen-Datenbank. 🙂
InformationsquelleAutor Luis H Cabrejo