- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Mysql 表“Event”,它有一个虚拟列“campaignId”。我试图在此列上创建索引但没有成功。
当我尝试创建索引时:
ALTER TABLE `botbit`.`Event`
ADD INDEX `IndexName` (`campaignId` ASC);
我收到这个错误
Error Code: 1366. Incorrect integer value: 'null' for column 'campaignId' at row 1
campaignId 列是虚拟的,其定义如下:
ALTER TABLE `botbit`.`Event`
ADD COLUMN `campaignId` INT(11) GENERATED ALWAYS AS (case when (json_unquote(json_extract(`customProps`,'$.campaignId')) IS NOT NULL) then json_unquote(json_extract(`customProps`,'$.campaignId')) else -4000 end);
如果 json 属性 campaignId 不存在,则 campaignId 的值设置为 -4000(以避免空值)。
我还测试了该列中是否存在空值,但没有:
select * from Event where campaignId IS NULL LIMIT 1;
0 row(s) returned
如果我在该列中没有任何空值,我不明白为什么 mysql 会告诉我“不正确的值:列 campaignId 为空”。
我在其他虚拟列上有其他索引并且工作正常,即使存在 NULL 值也是如此。所以,我认为应该有一些我无法弄清楚的数据问题。
编辑:寻找字符串“空”值我得到了这个结果
SELECT id,campaignId FROM tbl
WHERE json_unquote(json_extract(`customProps`,'$.campaignId'))
= 'null';
| 21096314 | 0 |
| 21096315 | 0 |
| 21096316 | 0 |
| 21096317 | 0 |
| 21096318 | 0 |
| 21096319 | 0 |
| 21096320 | 0 |
| 21096321 | 0 |
| 21096322 | 0 |
| 21096323 | 0 |
| 21096324 | 0 |
编辑 2:创建表
CREATE TABLE `Event` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` smallint(5) unsigned NOT NULL,
`subType` smallint(5) unsigned DEFAULT NULL,
`storeId` mediumint(9) NOT NULL,
`userId` int(11) DEFAULT NULL,
`source` smallint(5) unsigned NOT NULL DEFAULT '0',
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`customProps` json DEFAULT NULL,
`timestamp_i` int(11) DEFAULT NULL,
`mac` varchar(17) COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.mac'))) VIRTUAL,
`deviceId` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.deviceId'))) VIRTUAL,
`poc` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.poc'))) VIRTUAL,
`registeredThrough` varchar(45) COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.registeredThrough'))) VIRTUAL,
`pointOfContactId` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.pointOfContactId'))) VIRTUAL,
`ticket` decimal(10,0) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.ticket'))) VIRTUAL,
`promoCodeId` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.promoCodeId'))) VIRTUAL,
`date` date GENERATED ALWAYS AS (cast(`timestamp` as date)) VIRTUAL,
`npsScore` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.score'))) VIRTUAL,
`npsComment` varchar(2000) COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.comment'))) VIRTUAL,
`campaignName` varchar(2000) COLLATE utf8mb4_bin GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.campaignName'))) VIRTUAL,
`productId` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.productId'))) VIRTUAL,
`reservationId` int(11) GENERATED ALWAYS AS (json_unquote(json_extract(`customProps`,'$.id'))) VIRTUAL,
`campaignId` int(11) GENERATED ALWAYS AS ((case when (json_unquote(json_extract(`customProps`,'$.campaignId')) is not null) then json_unquote(json_extract(`customProps`,'$.campaignId')) else -(4000) end)) VIRTUAL,
`isCustomCampaign` tinyint(1) GENERATED ALWAYS AS ((case when (json_unquote(json_extract(`customProps`,'$.isCustomCampaign')) = 'true') then 1 when (json_unquote(json_extract(`customProps`,'$.isCustomCampaign')) = 'false') then 0 else 0 end)) VIRTUAL,
PRIMARY KEY (`id`),
UNIQUE KEY `Event_id_uindex` (`id`),
KEY `Event_userId_index` (`userId`),
KEY `Event_subType_storeId_index` (`subType`,`storeId`),
KEY `Event_timetamp_index` (`timestamp`),
KEY `Event_subtype_storeId_userId_timestamp_index` (`subType`,`userId`,`storeId`,`timestamp`),
KEY `Event_storeId_type` (`storeId`,`type`),
KEY `Event_mac_index` (`mac`),
KEY `Event_deviceId_index` (`deviceId`)
) ENGINE=InnoDB AUTO_INCREMENT=30693655 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
编辑 3:记录插入示例
INSERT INTO `Event` (`type`, `subType`, `storeId`, `userId`, `source`, `timestamp`, `customProps`) VALUES ('1', '16', '3', '1', '2', '2018-06-04 15:41:56', '{ \"campaignId\": 100, \"isCustomCampaign\": false }');
谢谢
最佳答案
边注:
ADD COLUMN `campaignId` INT(11)
GENERATED ALWAYS AS (
case when (json_unquote(json_extract(`customProps`,'$.campaignId')) IS NOT NULL)
then json_unquote(json_extract(`customProps`,'$.campaignId'))
else -4000 end);
更简单:
ADD COLUMN `campaignId` INT(11)
GENERATED ALWAYS AS (
COALESCE(json_unquote(json_extract(`customProps`,'$.campaignId')),
-4000)
至于问题,看你得到什么
SELECT * FROM tbl
WHERE json_unquote(json_extract(`customProps`,'$.campaignId'))
= 'null';
我认为 JSON 中某处有 4 个字母的字符串 "null"
。
(评论后)
mysql> SET @j := '{ \"campaignId\": 100, \"isCustomCampaign\": false }';
SELECT json_unquote(json_extract(@j, '$.campaignId')) AS the_value,
json_unquote(json_extract(@j, '$.campaignId')) = 'null' AS string_cmp,
json_unquote(json_extract(@j, '$.campaignId')) IS NULL AS null_cmp,
case when (json_unquote(json_extract(@j, '$.campaignId')) IS NOT NULL)
then json_unquote(json_extract(@j, '$.campaignId'))
else -4000 end AS the_case;
+-----------+------------+----------+----------+
| the_value | string_cmp | null_cmp | the_case |
+-----------+------------+----------+----------+
| 100 | 0 | 0 | 100 |
+-----------+------------+----------+----------+
SET @j := '{ \"isCustomCampaign\": false }';
(then same query)
+-----------+------------+----------+----------+
| the_value | string_cmp | null_cmp | the_case |
+-----------+------------+----------+----------+
| NULL | NULL | 1 | -4000 |
+-----------+------------+----------+----------+
这是否为您提供了更多线索?也许它还为您提供了一种在不涉及大表的情况下试验 JSON 的方法。
关于mysql - 在虚拟列上创建 mysql 索引时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54714710/
我的应用程序从一个有 5 个选项卡的选项卡栏 Controller 开始。一开始,第一个出现了它的名字,但其他四个没有名字,直到我点击它们。然后根据用户使用的语言显示名称。如何在选项卡栏出现之前设置选
我有嵌套数组 json 对象(第 1 层、第 2 层和第 3 层)。我的问题是数据表没有出现。任何相关的 CDN 均已导入。该表仅显示部分。我引用了很多网站,但都没有解决我的问题。 之前我使用标准表来
我正在尝试设置要显示的 Parse PFLoginViewController。这是我的一个 View Controller 的类。 import UIKit import Parse import
我遇到了这个问题,我绘制的对象没有出现在 GUI 中。我知道它正在被处理,因为数据被推送到日志文件。但是,图形没有出现。 这是我的一些代码: public static void main(Strin
我有一个树状图,其中包含出现这样的词...... TreeMap occurrence = new TreeMap (); 字符串 = 单词 整数 = 出现次数。 我如何获得最大出现次数 - 整数,
因此,我提示用户输入变量。如果变量小于 0 且大于 10。如果用户输入 10,我想要求用户再次输入数字。我问时间的时候输入4,它说你输入错误。但在第二次尝试时效果很好。例如:如果我输入 25,它会打印
我已经用 css overflow 属性做了一个例子。在这个例子中我遇到了一个溢出滚动的问题。滚动条出现了,但没有工作意味着每当将光标移动到滚动条时,在这个滚动条不活动的时间。我对此一无所知,所以请帮
我现在正在做一个元素。当您单击一个元素时,会出现以下信息,我想知道如何在您单击下一个元素而不重新单击同一元素时使其消失....例如,我的元素中有披萨,我想单击肉披萨看到浇头然后点击奶酪披萨看到浇头和肉
我有一个路由器模块,它将主题与正则表达式进行比较,并将出现的事件与一致的键掩码链接起来。 (它是一个简单的 url 路由过滤,如 symfony http://symfony.com/doc/curr
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: mysql_fetch_array() expects parameter 1 to be resource, bo
我在底部有一个带有工具栏的 View ,我正在使用 NavigationLink 导航到该 View 。但是当 View 出现时,工具栏显示得有点太低了。大约半秒钟后,它突然跳到位。它只会在应用程序启
我试图在我的应用程序上为背景音乐添加一个 AVAudioPlayer,我正在主屏幕上启动播放器,尝试在应用程序打开时开始播放但出现意外行为... 它播放并立即不断创建新玩家并播放这些玩家,因此同时播放
这是获取一个数字,获取其阶乘并将其加倍,但是由于基本情况,如果您输入 0,它会给出 2 作为答案,因此为了绕过它,我使用了 if 语句,但收到错误输入“if”时解析错误。如果你们能提供帮助,我真的很感
暂停期间抛出异常 android.os.DeadObjectException 在 android.os.BinderProxy.transactNative( native 方法) 在 androi
我已经为猜词游戏编写了一些代码。它从用户输入中读取字符并在单词中搜索该字符;根据字符是否在单词中,程序返回并控制一些变量。 代码如下: import java.util.Random; import
我是自动化领域的新手。这是我的简单 TestNG 登录代码,当我以 TestNG 身份运行该代码时,它会出现 java.lang.NullPointerException,双击它会突出显示我导航到 U
我是c#程序员,我习惯了c#的封装语法和其他东西。但是现在,由于某些原因,我应该用java写一些东西,我现在正在练习java一天!我要创建一个为我自己创建一个虚拟项目,以便让自己更熟悉 Java 的
我正在使用 Intellij,我的源类是 main.com.coding,我的资源文件是 main.com.testing。我将 spring.xml 文件放入资源文件中。 我的测试类位于 test.
我想要我的tests folder separate到我的应用程序代码。我的项目结构是这样的 myproject/ myproject/ myproject.py moduleon
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 因此,我尝试比较 2 个值,一个
我是一名优秀的程序员,十分优秀!