私の問題は次のとおりですfoo_table
。ID列ID
がbigint (primary key)
、名前列NAME
がvarchar(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