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
1, %, steht für beliebige 0 oder mehr Zeichen. Es...
Download von der offiziellen Website: https://www...
Inhaltsverzeichnis Vorbereitende Vorbereitung Ber...
Heute ist mir plötzlich aufgefallen, dass die Stil...
Das Boxmodell gibt die Breite und Höhe sowie die ...
Nachdem das Image erfolgreich erstellt wurde, kan...
Der experimentelle Code lautet wie folgt: </hea...
In diesem Artikel wird der Kapselungscode von Jav...
Inhaltsverzeichnis Vorbereitende Vorbereitung Imp...
Inhaltsverzeichnis 01 JavaScript (abgekürzt: js) ...
Inhaltsverzeichnis Funktionen von etcd Es gibt dr...
Ich werde nicht viel Unsinn erzählen, schauen wir...
Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...
Schauen wir uns zunächst den Code an <form id=...
Xrdp ist eine Open-Source-Implementierung des Rem...