1

我的问题如下:我有一个表foo_table,其中 idID列为bigint (primary key),名称NAME列为varchar(80),代码 COLUMN 代码为varchar(20)。我对 CODE 列有唯一的约束。

如果我在代码列中只用“数字”字符串填充此表,然后有一天决定在该代码列中添加一行,令人惊讶的是,“字符串”字符串,比如输入“我的代码”,它工作正常!当我尝试更新我以前的一条记录时出现错误,该记录的 CODE 值为数字;在这种情况下,我得到一个著名的错误:

错误 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
4

0 回答 0