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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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
|
Nach dem Login kopieren
1 2 | insert into p_app_station(wx_app_id) values('12121312312312啊啊啊啊啊aassasdasd');
select * from p_app_station where wx_app_id like '12121312312312%';
|
Nach dem Login kopieren
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.
1 | Data truncated for column '%s' at row %ld
|
Nach dem Login kopieren
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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);
} else if (strictTransTablesIsSet) {
setJdbcCompliantTruncation(false);
}
}
}
}
|
Nach dem Login kopieren
Zeigen Sie die getJdbcCompliantTruncation-Methode an, ihr Standardwert ist
1 2 | private BooleanConnectionProperty jdbcCompliantTruncation = new BooleanConnectionProperty( "jdbcCompliantTruncation" , true,
Messages.getString( "ConnectionProperties.jdbcCompliantTruncation" ), "3.1.2" , MISC_CATEGORY, Integer.MIN_VALUE);
|
Nach dem Login kopieren
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!