我的问题如下:
我有一个表foo_table
,ID为ID
bigint (primary key)
,名称列NAME
为varchar(80)
,代码COLUMN代码为varchar(20)
。我对CODE列有一个独特的约束。
如果我只用"数字"填写此表格代码列中的字符串,然后有一天决定添加一行,其中包含一个惊讶的"字符串"该代码列中的字符串,比如说'#34;我的代码",它工作正常!当我尝试更新我之前的一个记录时出现错误,一个CODE值为数字的记录;在这种情况下,我得到了一个着名的错误说:
ERROR 1292(22007):截断错误的DOUBLE值:'我的代码'。
我甚至没有触及那条记录!我认为MySQL正在尝试检查唯一约束并尝试将CODE列中的每个值转换为double,但这是疯了,而且非常不专业。
任何人都有解决方案吗?就像关闭MySQL中的字符串< - >数字转换一样?
提前致谢。
编辑: 好的我有示例代码,但在创建它时我看到了如何解决问题,就我而言,这仍然是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