Heim >Datenbank >MySQL-Tutorial >Ausführliche Erläuterung des Beispiels für die superlange automatische Kürzung in MySql
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, können aber automatisch abgeschnitten werden, wenn sie direkt in Navicat ausgeführt werden? In diesem Artikel werden hauptsächlich relevante Informationen zu den Beispielen für die automatische Kürzung in MySql vorgestellt. Hier ist ein Beispiel zur Veranschaulichung der Implementierung der automatischen Kürzungsfunktion. Ich hoffe, es kann jedem helfen.
lautet wie folgt
CREATE TABLE `p_app_station` ( `WX_APP_ID` varchar(20) NOT 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` datetime DEFAULT NULL, `CREATE_DATE` datetime DEFAULT NULL, `UPDATE_USER_ID` varchar(13) DEFAULT NULL, `STATION_TYPE` int(1) unsigned zerofill DEFAULT NULL COMMENT '标记类型(试用版:0,会员版:1,定制版:2)', `ACTIVE_DATE` datetime DEFAULT NULL COMMENT '使用时间截止', `APP_MODULE_ID` varchar(60) DEFAULT NULL COMMENT '推送模版消息ID', PRIMARY KEY (`WX_APP_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into p_app_station(wx_app_id) values('12121312312312啊啊啊啊啊aassasdasd'); select * from p_app_station where wx_app_id like '12121312312312%';
Offensichtlich reicht Varchar(20) nicht aus, um 12121312312312 unterzubringen ah ah ah Ah, aassasdasd
Abfrageergebnisse sind wie folgt
wird zwar automatisch abgeschnitten, aber beim Ausführen desselben SQL im Projekt wird es gefunden dass dies nicht der Fall ist und stattdessen ein Fehler gemeldet wird.
Data truncated for column '%s' at row %ld
Da es sich um dieselbe Datenbank handelt und es keine unterschiedlichen Modi gibt, sollte die Möglichkeit auf jdbcDriver erscheinen.
Zeigen Sie den JDBC-Quellcode an
private void setupServerForTruncationChecks() throws SQLException { if (getJdbcCompliantTruncation()) { if (versionMeetsMinimum(5, 0, 2)) { String currentSqlMode = this.serverVariables.get("sql_mode"); boolean strictTransTablesIsSet = StringUtils.indexOfIgnoreCase(currentSqlMode, "STRICT_TRANS_TABLES") != -1; if (currentSqlMode == null || currentSqlMode.length() == 0 || !strictTransTablesIsSet) { StringBuilder commandBuf = new StringBuilder("SET sql_mode='"); if (currentSqlMode != null && 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, false, this.database, null, false); setJdbcCompliantTruncation(false); // server's handling this for us now } else if (strictTransTablesIsSet) { // We didn't set it, but someone did, so we piggy back on it setJdbcCompliantTruncation(false); // server's handling this for us now } } } }
Zeigen Sie die getJdbcCompliantTruncation-Methode an, ihr Standardwert ist
private BooleanConnectionProperty jdbcCompliantTruncation = new BooleanConnectionProperty("jdbcCompliantTruncation", true, Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, Integer.MIN_VALUE);
Wenn also ab Version 3.1.2 jdbcCompliantTruncation nicht in jdbcurl festgelegt ist, wird standardmäßig nicht abgeschnitten und ein Fehler gemeldet.
Ist es also möglich, Parameter hinzuzufügen?
Lassen Sie uns einen Kompromiss eingehen:
Wenn es abgeschnitten ist und zu lang erscheint, besteht möglicherweise das Risiko eines Genauigkeitsverlusts.
Es wird daher empfohlen, dies im Programm zu überprüfen.
Derzeit wird an der Verwendung der Ruhezustandsvalidierung gearbeitet.
Verwandte Empfehlungen:
PHP-Chinesische Zeichenfolgenkürzung ohne verstümmelte Lösung
Texttypfeld in der MSSQL-Datenbank in PHP Das abgeschnittene Lösung in
Fragmentierungs- und Kürzungssequenz in Python
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Beispiels für die superlange automatische Kürzung in MySql. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!