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

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

黄舟
黄舟Original
2017-07-24 15:45:171743Durchsuche

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


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?

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!

Stellungnahme:
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