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:
|
<<: JS-Implementierung des Apple-Rechners
>>: Linux-Tutorial zum Ersetzen von Zeichenfolgen mit dem Befehl sed
Wenn Sie zusätzlichen Text in HTML als Auslassung...
Inhaltsverzeichnis 1. Ziehen Sie das Bild 1.1 Zie...
veranschaulichen: Es gibt zwei Haupttypen von Ngi...
jQuery realisiert den Effekt der Sitzplatzauswahl...
Vorwort Vor MySQL 8.0 war es ziemlich mühsam, Dat...
1. getBoundingClientRect() Analyse Die Methode ge...
Frage: Der häufig verwendete Befehl "ll"...
Seite: Basis: <Vorlage> <div Klasse=&quo...
Voraussetzungen 1. Docker wurde auf dem lokalen C...
Dieser Artikel beschreibt anhand von Beispielen d...
Inhaltsverzeichnis 1. Bilder 1. Was ist ein Spieg...
Vorwort Letzte Woche fragte mich ein Kollege: „Br...
Hintergrund Dieser Fehler wurde dadurch verursach...
Das Hinzufügen einer Hintergrundbildsteuerung zu ...
Inhaltsverzeichnis Vorne geschrieben Vorwort Was ...