Der Unterschied zwischen der Speicherung von Zeichen mit voller Breite und Zeichen mit halber Breite in MySQL

Der Unterschied zwischen der Speicherung von Zeichen mit voller Breite und Zeichen mit halber Breite in MySQL

Leider trat der Fehler MYSQL_DATA_TRUNCATED während der internen Tests von IM im Unternehmen erneut auf und der Protokolldatensatz erschien beim Aufruf von mysql_stmt_fetch. Nach bisherigen Erfahrungen sollte dies an der unzureichenden Länge des angegebenen Ergebnismengen-Bindungsbereichs liegen. Ich habe es mehrmals überprüft, konnte das Problem jedoch nicht finden. Ich habe entsprechende Beziehungen im Code. Beispielsweise werde ich für char(20) das Array char buffer[20] in meinem Code definieren, um es zu speichern. Es sieht so richtig und perfekt aus. Mir blieb nichts anderes übrig, als jede Datenzeile auszudrucken, die Zeile mit dem Fehler zu finden und festzustellen, dass die Schriftart sich von den anderen unterschied. Zum Beispiel:

123456789 (halbe Breite)
123456789 (volle Breite)

Dies wird nicht durch die Eingabe von Leerzeichen durch mich gesteuert, sondern über die Eingabemethode mit voller und halber Breite. Bei einem Zeichen voller Breite ist es doppelt so lang wie bei einem Zeichen halber Breite, und mein MySQL verwendet UTF-8, sodass ein Zeichen voller Breite in der Datenbank 3 Byte lang ist.

select length(column) from table_name where…;

Drucken Sie hiermit die Länge aus, dann können Sie es ablesen. Zu diesem Zeitpunkt müssen Sie das Problem berücksichtigen, die Länge des Typs im Code mit der Länge des Datenbankfelds abzugleichen, z. B. Zeichen in voller Breite oder chinesische Schriftzeichen. Das Zeichen char(20) in der Datenbank steht für 20 Zeichen, nicht für 20 Bytes. Bitte beachten Sie, dass Sie beim Abrufen von Daten nicht 20 als Länge des Ergebnissatzes verwenden.

<<:  WeChat-Miniprogramme ermöglichen nahtloses Scrollen

>>:  Zwei Möglichkeiten zum Aktivieren der Firewall im Linux-Dienst

Artikel empfehlen

Erläuterung von JavaScript-Mikrotasks und Makrotasks

Vorwort: js ist eine Single-Thread-Sprache, daher...

Eingabetyp begrenzen (mehrere Methoden)

1. Es können nur chinesische Schriftzeichen eingeg...

Detailliertes Beispiel für das Datenbankbetriebsobjektmodell in Spring jdbc

Detailliertes Beispiel für das Datenbankbetriebso...

So erstellen Sie ein ELK-Protokollsystem basierend auf Docker

Hintergrundanforderungen: Mit zunehmender Größe d...

Diskussion zum Problem verstümmelter Zeichen in Iframe-Seitenparametern

Ich bin auf ein sehr ungewöhnliches Problem mit ve...

Implementierung von Docker-Datenvolumenoperationen

Erste Schritte mit Datenvolumes Wenn wir im vorhe...

So installieren Sie binäres MySQL unter Linux und knacken das MySQL-Passwort

1. Stellen Sie sicher, dass das System über die e...

So umgehen Sie unbekannte Feldnamen in MySQL

Vorwort Dieser Artikel stellt die fünfte Frage vo...

Lösung für langsame Netzwerkanforderungen im Docker-Container

Bei der Verwendung von Docker wurden mehrere Prob...

Der Unterschied und die Einführung von ARGB, RGB und RGBA

ARGB ist ein Farbmodus, also der RGB-Farbmodus mi...