この記事では、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%';
クエリの結果は次のとおりです
確かに自動的に切り詰められますが、同じことを行いますプロジェクト SQL はこれが当てはまらないことを検出しましたが、エラーを報告しました。
Data truncated for column '%s' at row %ld
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 } } } }
private BooleanConnectionProperty jdbcCompliantTruncation = new BooleanConnectionProperty("jdbcCompliantTruncation", true, Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, Integer.MIN_VALUE);
パラメータを追加することは可能ですか?
トレードオフを考えてみましょう:
切り詰められて長すぎるように見える場合は、精度が失われるリスクがある可能性があります。
なので番組内で確認することをお勧めします。
現在、hibernate validate の使用に取り組んでいます。
以上がMySqlで長すぎる自動切り詰めの場合の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。