Heim >Datenbank >MySQL-Tutorial >Wie behebt man Fehler beim Speichern von Unicode in Django und MySQL durch „falsche Zeichenfolgenwerte'?

Wie behebt man Fehler beim Speichern von Unicode in Django und MySQL durch „falsche Zeichenfolgenwerte'?

Susan Sarandon
Susan SarandonOriginal
2024-11-24 00:51:10449Durchsuche

How to Fix

Falscher Zeichenfolgenwertfehler beim Speichern von Unicode-Zeichen in MySQL mit Django

Beim Versuch, Unicode-Zeichenfolgen im auth_user-Modell in Django zu speichern, haben Sie Möglicherweise wird die folgende Fehlermeldung angezeigt:

Incorrect string value: '\xC4\x8Dius' for column 'last_name' at row 104

Potenziell Ursachen

Dieser Fehler wird typischerweise durch Folgendes verursacht:

  • Zeichensatzeinschränkungen: MySQL hat eine 3-Byte-Grenze für UTF-8-Zeichen .
  • Datenbank- und Tabelleneinstellungen: Die Datenbank, die Tabelle und die Spalten müssen die verwenden utf8mb4-Zeichensatz zur Unterstützung von 4-Byte-Unicode-Zeichen.

Lösung

Um dieses Problem zu beheben, führen Sie die folgenden Schritte aus:

  1. Ändern Sie die Datenbank, Tabelle und Spalten, um das Zeichen utf8mb4 zu verwenden set:

    • Führen Sie die folgende Abfrage aus, um eine neue Datenbank mit dem Zeichensatz utf8mb4 zu erstellen:
    CREATE DATABASE db_name CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
    • Verwenden Sie die ALTER TABLE-Anweisung, um Ändern Sie die vorhandenen Tabellen und Spalten:
    ALTER TABLE auth_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  2. Geben Sie den Zeichensatz in den Django-Einstellungen an:

    In der Django-Einstellungsdatei (settings.py) , fügen Sie die folgende Zeile hinzu:

    DATABASES = {
        'default': {
            'ENGINE':'django.db.backends.mysql',
            ...
            'OPTIONS': {'charset': 'utf8mb4'},
        }
    }

Zusätzlich Überlegungen

  • Wenn Sie vorhandene CharField-Spalten mit einer maximalen Länge von 255 und einem Index darauf haben, müssen Sie die maximale Länge auf 191 reduzieren, um die Meldung „Angegebener Schlüssel war zu lang“ zu vermeiden " Fehler.
  • Alternativ können Sie Ihre MySQL-Konfiguration bearbeiten, um die Zeichenlängenbeschränkung zu entfernen. Dies erfordert jedoch zusätzliche Änderungen an Django.
  • Wenn möglich, erwägen Sie einen Wechsel zu PostgreSQL, da es bis zu 4-Byte-Unicode-Zeichen in UTF-8 ohne diese Einschränkungen unterstützt.

Das obige ist der detaillierte Inhalt vonWie behebt man Fehler beim Speichern von Unicode in Django und MySQL durch „falsche Zeichenfolgenwerte'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn