#1292-截断了错误的DOUBLE值:'039c1a02-ecd3-405a-a745-136df5bbecbb

时间:2019-09-22 11:40:09

标签: mysql

我一生都无法在代码中找到错误: 这是代码

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$$

1 个答案:

答案 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是一个了不起的网站,简直不敢相信我以前不知道