Heim > Datenbank > MySQL-Tutorial > Detaillierte Erläuterung des Falles einer überlangen automatischen Kürzung in MySql

Detaillierte Erläuterung des Falles einer überlangen automatischen Kürzung in MySql

黄舟
Freigeben: 2017-07-24 15:45:17
Original
1848 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erläuterung von MySql-Beispielen für überlange automatische Kürzungen vorgestellt. Hier finden Sie ein Beispiel zur Veranschaulichung der Implementierung der automatischen Kürzungsfunktion.

MySql Beispiele für überlange automatische Kürzungen. Detaillierte Erklärung

Ein Freund hat eine Frage gestellt: Warum können zu lange Wörter beim Aufrufen von Insert- oder Update-Anweisungen im Projekt nicht automatisch gekürzt werden, können aber automatisch gekürzt werden, wenn sie direkt in ausgeführt werden Navicat?

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
Nach dem Login kopieren


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.


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


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
      }
 
    }
  }
}
Nach dem Login kopieren

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);
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?

Machen Sie einen Kompromiss:

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.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Falles einer überlangen automatischen Kürzung in MySql. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Aktuelle Ausgaben
So ändern Sie MySQL in MySQL
Aus 1970-01-01 08:00:00
0
0
0
MySQL-Startfehler unter Centos
Aus 1970-01-01 08:00:00
0
0
0
MySQL stoppt den Prozess
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage