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

Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet

Amtliche Dokumentation: Daher sollte MySQL wie fo...

So installieren Sie schnell eine Tensorflow-Umgebung in Docker

Installieren Sie schnell die Tensorflow-Umgebung ...

Beispiel zum Anzeigen und Ändern der MySQL-Transaktionsisolationsebene

Überprüfen Sie die Transaktionsisolationsebene In...

Analyse von MySQL-Parallelitätsproblemen und -Lösungen

Inhaltsverzeichnis 1. Hintergrund 2. Langsame Abf...

Analyse des Prinzips von Vue nextTick

Inhaltsverzeichnis Ereignisschleife miscroTask (M...

Implementierung integrierter Module und benutzerdefinierter Module in Node.js

1. Commonjs Commonjs ist ein benutzerdefiniertes ...

JavaScript zum Erreichen eines einfachen Seiten-Countdowns

In diesem Artikelbeispiel wird der spezifische Ja...

HTML+CSS zum Erstellen eines Dropdown-Menüs

1. Beispiel einer Dropdown-Liste Der Code lautet ...

Express implementiert Login-Verifizierung

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erklärung des Linux-Befehls unzip

Inhaltsverzeichnis 1. Unzip-Befehl 1.1 Syntax 1.2...

Das WeChat-Applet implementiert den Wasserfallfluss, Paging, Scrollen und Laden

In diesem Artikel wird der spezifische Code für d...