我一生都无法在代码中找到错误: 这是代码
INSERT INTO ce000
(guid,number,cedate,debit,credit,notes,currencyguid,currencyval,cesecurity,isposted,isprinted,typeguid,usguid)
VALUES
('039c1a02-ecd3-405a-a745-136df5bbecbb',
1331,
'2019-09-01',
50000,
200000,
'My First Entry',
'5a8fe466-d2c7-11e9-b2ad-54ab3a1011d7',
1,1,1,0,
'0x0',
'6d102621-d219-11e9-b2ad-54ab3a1011d7')
它抛出了这个错误:
#1292 - Truncated incorrect DOUBLE value: '039c1a02-ecd3-405a-a745-136df5bbecbb
这是ce000表的结构:
1 guid char(38)
2 number int(11)
3 cedate datetime
4 debit float
5 credit float
6 notes varchar(255)
7 currencyguid char(38)
8 currencyval float
9 cesecurity int(11)
10 isposted int(11)
11 isprinted int(11)
12 typeguid char(38)
13 usguid char(38)
14 created_at datetime
我找不到错误的地方在哪里?
更新: 显示创建表ce000:
CREATE TABLE `ce000` (
`guid` char(38) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`number` int(11) DEFAULT NULL,
`cedate` datetime DEFAULT NULL,
`debit` float DEFAULT NULL,
`credit` float DEFAULT NULL,
`notes` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`currencyguid` char(38) COLLATE utf8_unicode_ci DEFAULT NULL,
`currencyval` float DEFAULT NULL,
`cesecurity` int(11) DEFAULT NULL,
`isposted` int(11) DEFAULT NULL,
`isprinted` int(11) DEFAULT NULL,
`typeguid` char(38) COLLATE utf8_unicode_ci DEFAULT NULL,
`usguid` char(38) COLLATE utf8_unicode_ci DEFAULT NULL,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`guid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
另一个更新: 表ce000具有以下触发器,仅当INSERT语句缺少guid值时,该触发器才触发,该表将其设置为默认值0,并且触发器应捕获0值并将其变为ti uuid():
DELIMITER $$
CREATE TRIGGER `ce000_before_insert` BEFORE INSERT ON `ce000`
FOR EACH ROW BEGIN
IF new.guid = 0 THEN
SET new.guid = uuid();
END IF;
END$$
答案 0 :(得分:0)
我的天哪
问题出在触发器上
DELIMITER $$
CREATE TRIGGER `ce000_before_insert` BEFORE INSERT ON `ce000`
FOR EACH ROW BEGIN
IF new.guid = 0 THEN
SET new.guid = uuid();
END IF;
END$$
由于guid类型是char(38),当我告诉它if = 0(不带引号)时,它不起作用
所以我只添加了'0'文本引号,以使mysql将其理解为字符串而不是整数。
上帝我的大脑被炸了
非常感谢GMB
DBFiddle.com是一个了不起的网站,简直不敢相信我以前不知道