1

私の問題は次のとおりですfoo_table。ID列IDbigint (primary key)、名前列NAMEvarchar(80)、コードCOLUMNコードが のテーブルがありますvarchar(20)。CODE 列に一意の制約があります。

このテーブルにコード列に「数字」文字列のみを入力し、ある日、そのコード列に驚きの「文字列」文字列を含む行を追加することを決定した場合、たとえば「マイコード」を入力すると、正常に動作します! 以前のレコードの 1 つを更新しようとしたときにエラーが発生しました。CODE 値は数字です。この場合、次のような有名なエラーが表示されます。

エラー 1292 (22007): 切り捨てられた不正な DOUBLE 値: 'My Code'.

私はその記録にさえ触れていません!MySQL は一意の制約をチェックして、CODE 列のすべての値を double に変換しようとしていると思いますが、それは正気ではなく、非常に専門的ではありません。

誰にも解決策がありますか?MySQL で string<->number 変換をオフにするのと同じように?

前もって感謝します。

編集:サンプルコードはありますが、作成中に問題を修正する方法を見ました。これは、私が懸念する限り、MySQLの問題です。

CREATE TABLE foo_table (
ID bigint(20) NOT NULL DEFAULT '0', 
NAME varchar(80) DEFAULT NULL,
CODE varchar(20) NOT NULL DEFAULT '', 
UNIQUE KEY foo_table_uk (CODE)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;

insert into foo_table (id, name, code) values (1, 'one', '1');
insert into foo_table (id, name, code) values (2, 'two', '2');
insert into foo_table (id, name, code) values (3, 'three', 'three');

update foo_table set name='a-one', code='1' where code=1; <-- This update throws the error

update foo_table set name='a-one', code='1' where code='1'; <-- this update works fine
4

0 に答える 0