집 >데이터 베이스 >MySQL 튜토리얼 >MySql에서 너무 긴 자동 잘림 사례에 대한 자세한 설명
이 글은 주로 MySql 초장기 자동 잘림 인스턴스의 자세한 설명에 대한 관련 정보를 소개합니다. 다음은 자동 잘림 기능 구현 방법을 보여주는 예시입니다. 필요하신 분들은 참고하세요
MySql의 매우 긴 자동 잘림 인스턴스
친구에게 물어보세요. 프로젝트에서 명령문 삽입 또는 업데이트가 호출될 때 왜 너무 긴 단어가 자동으로 잘리지 않지만 Navicat에서 직접 실행할 때는 자동으로 잘릴 수 있는지 질문이 있습니다.
다음과 같습니다
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%';
분명히 varchar(20)은 12121312312312 aaaaaaaaassasdasd
쿼리 결과는 다음과 같습니다
실제로는 자동으로 잘리지만, 프로젝트 SQL은 이것이 사실이 아니라는 것을 발견했지만 오류를 보고했습니다.
Data truncated for column '%s' at row %ld
동일한 데이터베이스이고 다른 스키마가 없다는 점을 고려하면 jdbcDriver에 가능성이 나타나야 합니다.
jdbc 소스 코드 보기
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 } } } }
getJdbcCompliantTruncation 메소드 보기, 기본값은
private BooleanConnectionProperty jdbcCompliantTruncation = new BooleanConnectionProperty("jdbcCompliantTruncation", true, Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, Integer.MIN_VALUE);
그래서 버전 3.1.2부터는 jdbcurl에 jdbcCompliantTruncation이 설정되어 있지 않으면 잘림 없이 실행되어 보고됩니다. 기본적으로 오류가 발생합니다.
그럼 매개변수를 추가해도 괜찮을까요?
절충점을 만들어 보겠습니다.
잘려서 너무 길어 보이는 경우 정확도가 떨어질 위험이 있습니다.
그래서 프로그램에서 확인하시는 걸 추천드려요.
현재 최대 절전 모드 유효성 검사를 사용하는 작업 중입니다.
위 내용은 MySql에서 너무 긴 자동 잘림 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!