MySql 自動切り捨て例の詳細な説明 友人が質問しました。プロジェクト内で挿入または更新ステートメントを呼び出すときに長すぎる単語を自動的に切り捨てることができないのに、Navicat で直接実行すると自動的に切り捨てられるのはなぜですか? 次のように テーブル `p_app_station` を作成します ( `WX_APP_ID` varchar(20) NULLではない、 `APP_SECRET` varchar(33) デフォルト NULL, `IS_BINDING` int(1) デフォルト '0', `ACCOUNT_ID` int(13) デフォルト NULL, `TOKEN` varchar(40) デフォルト NULL, `BIND_URL` varchar(200) デフォルト NULL, `WX_APP_NAME` varchar(50) デフォルト NULL, `WX_APP_SID` varchar(50) デフォルト NULL, `WX_NO` varchar(50) デフォルト NULL, `CREATE_USER_ID` varchar(13) デフォルト NULL, `UPDATE_DATE` 日時 デフォルト NULL、 `CREATE_DATE` 日時 DEFAULT NULL、 `UPDATE_USER_ID` varchar(13) デフォルト 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', 主キー (`WX_APP_ID`) ) エンジン=InnoDB デフォルト文字セット=utf8 p_app_station(wx_app_id) に値('12121312312312啊啊啊啊啊aassasdasd') を挿入します。 p_app_station から、wx_app_id が '12121312312312%' のような * を選択します。 明らかにvarchar(20)は12121312312312を保持するには大きさが足りません。ああああああ、ああああ。 クエリの結果は次のとおりです 確かに自動的に切り捨てられましたが、プロジェクト内で同じ SQL を実行すると、そうではないことが判明し、代わりにエラーが報告されました。 行 %ld の列 '%s' のデータが切り捨てられました 同じデータベースであり、スキーマに違いがないことを考慮すると、可能性は jdbcDriver にあるはずです。 JDBC ソースコードを表示 プライベートvoid setupServerForTruncationChecks()はSQLExceptionをスローします{ (getJdbcCompliantTruncation())の場合{ バージョンが最小値(5, 0, 2)を満たす場合 文字列 currentSqlMode = this.serverVariables.get("sql_mode"); ブール値 strictTransTablesIsSet = StringUtils.indexOfIgnoreCase(currentSqlMode, "STRICT_TRANS_TABLES") != -1; (currentSqlMode == null || currentSqlMode.length() == 0 || !strictTransTablesIsSet) の場合 { StringBuilder commandBuf = new StringBuilder("SET sql_mode='"); (currentSqlMode != null && currentSqlMode.length() > 0) の場合 { commandBuf.append(現在のSqlMode); コマンドBuf.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); // サーバーがこれを処理します } そうでない場合 (strictTransTablesIsSet) { // 私たちは設定していませんが、誰かが設定したので、それに便乗します setJdbcCompliantTruncation(false); // サーバーがこれを処理します } } } } getJdbcCompliantTruncationメソッドを表示します。デフォルト値は プライベート BooleanConnectionProperty jdbcCompliantTruncation = 新しい BooleanConnectionProperty("jdbcCompliantTruncation", true, Messages.getString("ConnectionProperties.jdbcCompliantTruncation"), "3.1.2", MISC_CATEGORY, Integer.MIN_VALUE); したがって、バージョン 3.1.2 以降では、jdbcurl で jdbcCompliantTruncation が設定されていない場合、デフォルトでは切り捨てなしで実行され、エラーが報告されます。 それで、パラメータを追加することは可能ですか? 選択してください: 値が指定された長さより長い場合、精度が失われるリスクがあります。 そのため、プログラム内で確認することをお勧めします。 現在、hibernate validate の使用に取り組んでいます。 上記は、MySQL 切り捨てについての説明です。ご質問がある場合は、メッセージを残すか、このサイトのコミュニティに参加して議論し、一緒に進歩することができます。お読みいただきありがとうございます。皆様のお役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: sed コマンドを使用して文字列を置換する Linux チュートリアル
>>: Linux Bash スクリプトを使用してユーザーを識別する方法の例
<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...
公式の MySQL イメージを使用するには、構成ファイル、DB データ ファイル ディレクトリなどの...
この記事では、Vueを使用してショッピングカートの数量を変更する方法を紹介します。具体的な内容は次の...
もちろん、ページ パフォーマンスの最適化に関する個人的な経験も含まれています。ここでいくつかの点につ...
文字化けしたコードの問題は次のとおりです。 この問題の原因は非常に単純です。コマンドラインのエンコー...
序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...
この記事を読む前に、ボリューム、バインドマウント、tmpfs マウントの基本を理解しておいてください...
ハイパーリンクの下線を削除するには、スタイルシート CSS を使用する必要があります。当面は CSS...
図に示すように: ポートの使用状況を確認します: sudo netstat -apn | grep ...
目次1. 関数の定義1.1 JavaScript の関数1.2 TypeScriptの関数2. オプ...
目次JSX環境の構築プロジェクトの設定NPMを初期化するwebpackをインストールするBabelを...
背景まず最初に、私はフロントエンド開発の専門家ではないことを述べておきたいと思います。私の以前のコン...
目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...
WeChatアプレット:シンプルな計算機、参考までに、具体的な内容は次のとおりです。ミニプログラムに...
質問js を使用して CSS 疑似クラス スタイルを変更するにはどうすればよいでしょうか?しかし、j...