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

So führen Sie das React-Projekt auf dem offiziellen WeChat-Konto aus

Inhaltsverzeichnis 1. Verwenden Sie das „A“-Tag, ...

Detaillierte Einführung in den DOCTYPE-Typ

<br />Wir deklarieren DOCTYPE in HTML normal...

Detaillierter Prozess der Installation von nginx1.9.1 auf centos8

1.17.9 Wirklich leckerer Nginx-Download-Adresse: ...

Konfigurieren von MySQL und Squel Pro auf dem Mac

Als Reaktion auf die Popularität von nodejs haben...

Lösung für MySQL-Replikationsfehler aufgrund voller Festplatte

Inhaltsverzeichnis Fallbeispiel Lösung des Proble...

Detaillierte Erklärung des wunderbaren CSS-Attributs MASK

Dieser Artikel stellt eine sehr interessante Attr...

Wir zeigen Ihnen einen Trick, um einen Textvergleich unter Linux durchzuführen

Vorwort Während des Schreibens des Codes werden w...

Beispiel für den Aufbau eines Redis-Sentinel-Clusters basierend auf Docker

1. Übersicht Redis Cluster ermöglicht hohe Verfüg...

Probleme bei der Installation von MySQL und mysql.sock unter Linux

Vor kurzem traten bei der Installation von Apache...