2016-08-04 20 views
1

更新文で問題をデバッグしようとしています。開発環境の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; 
+0

'SELECTを@@ VERSION、@@ SQL_MODE; '比較する。 –

+0

トリガーもチェックしてください。クエリには明白なエラーがないので、トリガーがこれを投げている可能性があります。 –

+0

マイケル、ありがとう。パーティテーブルからparty_historyテーブルにコピーするトリガがあります。 party_historyテーブルの列はvarchar(45)のみであるため、問題の原因と思われます。これは、履歴テーブルのテーブル定義の問題が同じローカル環境で成功するということに困惑しています。 –

答えて

0

データ切り捨てが発生したテーブル定義でありますデータ値が挿入されます。たとえば、

あなたのフィールド "name_last VARCHAR(10)" そして、あなたはエラーリターンデータは切り捨て10文字以上の値を挿入:

詳細は下記のリンクを参照してください。

https://en.wikipedia.org/wiki/Data_truncation

+0

私は同意します。しかし、上記の文でわかるように、失敗した場合、name_last列に格納しようとしている値はわずか3文字です。列は60文字のサイズで定義されています。したがって、そのような状況は当てはまらないようです。 –

関連する問題