Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie geht man mit Akzenten und seltsamen Zeichen in einer Datenbank um?

Sammlung wirkt sich nur auf die Textsortierung aus, es hat keine Auswirkung auf den tatsächlichen Zeichensatz der gespeicherten Daten.

Ich würde diese Konfiguration empfehlen:

  1. Stellen Sie den Zeichensatz für die gesamte DB ein nur, so dass Sie es nicht für jede Tabelle separat einstellen müssen. Der Zeichensatz wird von DB an Tabellen an Spalten vererbt. Verwenden Sie utf8 als Zeichensatz.

  2. Stellen Sie den Zeichensatz für die DB-Verbindung ein . Führen Sie diese Abfragen aus, nachdem Sie sich mit der Datenbank verbunden haben:

    SET CHARACTER SET 'utf8'
    SET NAMES 'utf8'
    
  3. Stellen Sie den Zeichensatz für die Seite ein , mit HTTP-Header und/oder HTML-Meta-Tag. Einer davon reicht. Verwenden Sie utf-8 als charset .

Das sollte reichen.

Wenn Sie eine korrekte Sortierung spanischer Zeichenfolgen haben möchten, stellen Sie Collation ein für die gesamte Datenbank. utf8_spanish_ci sollte funktionieren (ci bedeutet Groß-/Kleinschreibung ). Ohne richtige Sortierung würden spanische Zeichen mit Akzent immer zuletzt sortiert werden.

Hinweis :Es ist möglich, dass der Zeichensatz von Daten, die Sie bereits in einer Tabelle haben, beschädigt ist, weil Ihre Zeichensatzkonfiguration zuvor falsch war. Sie sollten dies zuerst mit einem DB-Client überprüfen, um diesen Fall auszuschließen. Wenn es kaputt ist, geben Sie einfach Ihre Daten mit der richtigen Zeichensatzkonfiguration erneut ein.

Wie funktioniert Zeichensatz in einer Datenbank arbeiten

  • Objekte einen Zeichensatz haben Attribut, das explizit gesetzt oder vererbt werden kann (Server> Datenbank> Tabelle> Spalte), daher ist es am besten, es für die gesamte Datenbank zu setzen

  • Clientverbindung hat auch einen Zeichensatz -Attribut und teilt der Datenbank mit, in welcher Kodierung Sie die Daten senden

Wenn die Zeichensätze der Clientverbindung und des Zielobjekts unterschiedlich sind, werden die Daten, die Sie an die Datenbank senden, automatisch vom Zeichensatz der Verbindung in den Zeichensatz des Objekts konvertiert.

Wenn Sie also beispielsweise die Daten in utf8 haben , aber Client-Verbindung auf latin1 setzen , wird die Datenbank die Daten beschädigen, da sie versucht, utf8 zu konvertieren als wäre es latin1 .