更新文で問題をデバッグしようとしています。開発環境のJavaアプリケーションでは失敗しますが、ローカル環境では成功します。手で実行すると、ローカル環境では正常に動作しますが、開発環境では正しく動作しません。テーブル定義は、auto_incrementの現在の値を除いて、両方の環境で同じです。MySQL Varchar行1のカラムname_lastのデータが切り捨てられました
エラーは次のとおりです。ここで
Error Code: 1265. Data truncated for column 'name_last' at row 1 0.062 sec
はクエリです:ここでは
update party set
master_id = 0,
name_last = 'aaa',
name_first = 'bbb333333333333333333333333333333333333333333333333333444444',
name_middle = 'ccc555555555555555555555555555555555555555555556666666666666',
name_suf = null,
business_name = null,
business= 0,
alias_of_id= null,
is_alias= 0,
updated_user = 3,
active = 1
where
party_id = 20986
は、フィールドのサイズがより小さいとき
CREATE TABLE `party` (
`party_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`master_id` int(10) unsigned DEFAULT NULL,
`name_first` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
`name_last` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
`name_middle` varchar(60) COLLATE utf8_unicode_ci DEFAULT NULL,
`name_suf` varchar(45) COLLATE utf8_unicode_ci DEFAULT '',
`business_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT '',
`is_alias` bit(1) DEFAULT b'0',
`alias_of_id` int(10) unsigned DEFAULT NULL,
`business` bit(1) NOT NULL DEFAULT b'0',
`active` bit(1) NOT NULL DEFAULT b'1',
`updated_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_user` int(10) unsigned NOT NULL,
`created_user` int(10) unsigned NOT NULL,
`name_pre` varchar(5) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`party_id`),
KEY `IX_Party_Name` (`name_first`,`name_last`,`name_middle`)
) ENGINE=InnoDB AUTO_INCREMENT=20988 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
'SELECTを@@ VERSION、@@ SQL_MODE; '比較する。 –
トリガーもチェックしてください。クエリには明白なエラーがないので、トリガーがこれを投げている可能性があります。 –
マイケル、ありがとう。パーティテーブルからparty_historyテーブルにコピーするトリガがあります。 party_historyテーブルの列はvarchar(45)のみであるため、問題の原因と思われます。これは、履歴テーブルのテーブル定義の問題が同じローカル環境で成功するということに困惑しています。 –