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

Implementierung einer Fuzzy-Abfrage wie %% in MySQL

1, %, steht für beliebige 0 oder mehr Zeichen. Es...

Automatisiertes Frontend-Deployment basierend auf Docker, Nginx und Jenkins

Inhaltsverzeichnis Vorbereitende Vorbereitung Ber...

Implementierung des Pushens von Docker-Images zum Docker Hub

Nachdem das Image erfolgreich erstellt wurde, kan...

Kommentare auf Webseiten verursachen Textüberlauf im Internet Explorer

Der experimentelle Code lautet wie folgt: </hea...

JavaScript-Plugin-Kapselung für Tabellenwechsel

In diesem Artikel wird der Kapselungscode von Jav...

Schritte zum Importieren von Millionen von Daten in MySQL mit .Net Core

Inhaltsverzeichnis Vorbereitende Vorbereitung Imp...

Super detaillierte grundlegende JavaScript-Syntaxregeln

Inhaltsverzeichnis 01 JavaScript (abgekürzt: js) ...

Mysql-Operation zum Abrufen von Tabellenkommentarfeldern

Ich werde nicht viel Unsinn erzählen, schauen wir...

Element-Beispielcode zum Implementieren dynamischer Tabellen

Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...

So installieren Sie den Xrdp-Server (Remote Desktop) unter Ubuntu 20.04

Xrdp ist eine Open-Source-Implementierung des Rem...