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 konfigurieren Sie die Basic Auth-Anmeldeauthentifizierung in Nginx

Manchmal erstellen wir einen Dateiserver über ngi...

Ein umfassendes Verständnis der funktionalen Komponenten von Vue.js

Inhaltsverzeichnis Vorwort Funktionale React-Komp...

Installationsmethode der dekomprimierten Version von MySQL 5.7.18 unter Win7x64

Weiterführende Literatur: Beheben Sie das Problem...

Einführung in die MySQL-Ansicht und Tutorial zur grundlegenden Bedienung

Vorwort Ansicht ist ein sehr nützliches Datenbank...

Ubuntu öffnet Port 22

Szenario Sie müssen das Xshell-Tool verwenden, um...

MySQL-Variablendeklaration und Analyse gespeicherter Prozeduren

Deklarieren von Variablen Festlegen globaler Vari...

JavaScript zur Implementierung des Anmeldeformulars

In diesem Artikelbeispiel wird der spezifische Ja...

JavaScript, um die Idee des Schlangenspiels umzusetzen

Die Implementierungsidee des Javascript-Spiels Sn...

Detaillierter Prozess zur Konfiguration von NIS in Centos7

Inhaltsverzeichnis Prinzip Vorbereitung der Netzw...