Detaillierte Erläuterung des MySql-Beispiels für automatische Kürzung

Detaillierte Erläuterung des MySql-Beispiels für automatische Kürzung

Detaillierte Erläuterung des MySql-Beispiels für automatische Kürzung

Ein Freund hat eine Frage gestellt: Warum können zu lange Wörter beim Aufrufen von Insert- oder Update-Anweisungen im Projekt nicht automatisch abgeschnitten werden, bei der direkten Ausführung in Navicat aber schon?

wie folgt

Tabelle „p_app_station“ erstellen (
 `WX_APP_ID` ​​​​varchar(20) NICHT NULL,
 `APP_SECRET` varchar(33) DEFAULT NULL,
 `IS_BINDING` int(1) DEFAULT '0',
 `ACCOUNT_ID` int(13) DEFAULT NULL,
 `TOKEN` varchar(40) DEFAULT NULL,
 `BIND_URL` varchar(200) DEFAULT NULL,
 `WX_APP_NAME` varchar(50) DEFAULT NULL,
 `WX_APP_SID` varchar(50) DEFAULT NULL,
 `WX_NO` varchar(50) DEFAULT NULL,
 `CREATE_USER_ID` varchar(13) DEFAULT NULL,
 `UPDATE_DATE` Datum/Uhrzeit DEFAULT NULL,
 `CREATE_DATE` Datum/Uhrzeit DEFAULT NULL,
 `UPDATE_USER_ID` varchar(13) DEFAULT NULL,
 `STATION_TYPE` int(1) unsigned zerofill DEFAULT NULL COMMENT 'Markierungstyp (Testversion: 0, Mitgliedsversion: 1, benutzerdefinierte Version: 2)',
 `ACTIVE_DATE` datetime DEFAULT NULL COMMENT 'Ablaufdatum',
 `APP_MODULE_ID` varchar(60) DEFAULT NULL COMMENT 'Push-Vorlagen-Nachrichten-ID',
 PRIMÄRSCHLÜSSEL (`WX_APP_ID`)
) ENGINE=InnoDB STANDARD-CHARSET=utf8
in p_app_station(wx_app_id) Werte einfügen('12121312312312啊啊啊啊啊aassasdasd');
Wählen Sie * von p_app_station, wobei wx_app_id wie „12121312312312%“ ist;

Offensichtlich ist varchar(20) nicht groß genug, um 12121312312312 ah ah ah aassasdasd aufzunehmen

Die Abfrageergebnisse lauten wie folgt

Es wurde zwar automatisch abgeschnitten, aber bei der Ausführung des gleichen SQL im Projekt stellte sich heraus, dass dies nicht der Fall war, und stattdessen wurde ein Fehler gemeldet.

Daten für Spalte „%s“ in Zeile %ld abgeschnitten

Da es sich um dieselbe Datenbank handelt und kein Unterschied im Schema besteht, sollte die Möglichkeit bei jdbcDriver liegen.

JDBC-Quellcode anzeigen

private void setupServerForTruncationChecks() wirft SQLException {
  wenn (getJdbcCompliantTruncation()) {
    wenn (versionErfülltMinimum(5, 0, 2)) {
      Zeichenfolge currentSqlMode = this.serverVariables.get("sql_mode");
 
      boolean strictTransTablesIsSet = StringUtils.indexOfIgnoreCase(currentSqlMode, "STRICT_TRANS_TABLES") != -1;
 
      wenn (currentSqlMode == null || currentSqlMode.length() == 0 || !strictTransTablesIsSet) {
        StringBuilder commandBuf = neuer StringBuilder("SET sql_mode='");
 
        wenn (currentSqlMode != null und currentSqlMode.length() > 0) {
          commandBuf.append(currentSqlMode);
          commandBuf.append(",");
        }
 
        commandBuf.append("STRICT_TRANS_TABLES'");
 
        execSQL(null, commandBuf.toString(), -1, null, DEFAULT_RESULT_SET_TYPE, DEFAULT_RESULT_SET_CONCURRENCY, falsch, diese.Datenbank, null, falsch);
 
        setJdbcCompliantTruncation(false); // der Server erledigt das jetzt für uns
      } sonst wenn (strictTransTablesIsSet) {
        // Wir haben es nicht festgelegt, aber jemand anderes hat es getan, also können wir uns daran hängen
        setJdbcCompliantTruncation(false); // der Server erledigt das jetzt für uns
      }
 
    }
  }
}

Sehen Sie sich die Methode getJdbcCompliantTruncation an. Ihr Standardwert ist

private BooleanConnectionProperty jdbcCompliantTruncation = neue BooleanConnectionProperty("jdbcCompliantTruncation", true,
    Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, Integer.MIN_VALUE);

Wenn daher ab Version 3.1.2 „jdbcCompliantTruncation“ in jdbcurl nicht festgelegt ist, erfolgt die Ausführung standardmäßig ohne Kürzung und mit Meldung eines Fehlers.

Ist es also möglich, Parameter hinzuzufügen?

Treffen Sie eine Wahl:

Wenn der Wert länger als die angegebene Länge ist, besteht die Gefahr eines Genauigkeitsverlusts.

Es wird daher empfohlen, dies im Programm zu überprüfen.

Derzeit wird an der Verwendung der Hibernate-Validierung gearbeitet.

Das Obige ist die Erklärung zur MySQL-Abschneidung. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen oder zur Community dieser Site kommen, um gemeinsam zu diskutieren und Fortschritte zu erzielen. Vielen Dank fürs Lesen und ich hoffe, es kann allen helfen. Vielen Dank für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Tutorial zur Installation und Konfiguration der dekomprimierten Version von mysql5.7.19 winx64
  • Grafisches Tutorial zur Installation und Konfiguration von CentOS 6.4 MySQL 5.7.18
  • Detaillierte Anweisungen zum Download und Installationsprozess von MySQL 5.7.18
  • So verwenden Sie reguläre Ausdrucksabfragen in MySql
  • Zusammenfassung der PHP-Methode zum Erkennen, ob eine MySQL-Tabelle vorhanden ist

<<:  JS-Implementierung des Apple-Rechners

>>:  Linux-Tutorial zum Ersetzen von Zeichenfolgen mit dem Befehl sed

Artikel empfehlen

So konvertieren Sie zusätzlichen Text in HTML in Auslassungspunkte

Wenn Sie zusätzlichen Text in HTML als Auslassung...

Detailliertes Tutorial zur Installation von SonarQube mit Docker

Inhaltsverzeichnis 1. Ziehen Sie das Bild 1.1 Zie...

Beschreibung der Nginx-Zugriffsprotokoll- und Fehlerprotokollparameter

veranschaulichen: Es gibt zwei Haupttypen von Ngi...

jQuery realisiert den Effekt der Sitzplatzauswahl und -reservierung im Theater

jQuery realisiert den Effekt der Sitzplatzauswahl...

Einführung und Zusammenfassung der MySQL 8.0-Fensterfunktionen

Vorwort Vor MySQL 8.0 war es ziemlich mühsam, Dat...

Detaillierte Erklärung der Methode getBoundingClientRect() in js

1. getBoundingClientRect() Analyse Die Methode ge...

Docker nginx Beispielmethode zum Bereitstellen mehrerer Projekte

Voraussetzungen 1. Docker wurde auf dem lokalen C...

Der Unterschied zwischen Löschen, Abschneiden und Löschen und wie man wählt

Vorwort Letzte Woche fragte mich ein Kollege: „Br...

CSS-Einstellung Div-Hintergrundbild-Implementierungscode

Das Hinzufügen einer Hintergrundbildsteuerung zu ...

Entwicklungshandbuch für Chrome-Plugins (Erweiterungen) (vollständige Demo)

Inhaltsverzeichnis Vorne geschrieben Vorwort Was ...