首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL更新问题-更新空字段,但不更新已包含数据的字段

MySQL更新问题-更新空字段,但不更新已包含数据的字段
EN

Stack Overflow用户
提问于 2012-12-13 09:50:04
回答 2查看 175关注 0票数 0

我正在努力处理一个MySQL查询。以下是问题所在:

代码语言:javascript
运行
复制
SELECT * from sf_forecasts WHERE contentid='1234' AND fulldate='2012-12-13'

在我的表中有一条记录符合此条件,此查询可以轻松地找到它。但是,当我使用这个查询来更新它时...

代码语言:javascript
运行
复制
UPDATE sf_forecasts
SET listingTitle ='Some Snow Resort', location ='49.23, -115.22'
WHERE contentid='1234' AND fulldate='2012-12-13'

...I总是收到"0行受影响“的通知。奇怪的是,查询实际上是在更新记录,但它只涉及为空的字段。如果我的示例记录的'location‘值为NULL,则查询将更新数据,但如果它已经包含非NULL值,则查询不会更改它,即使查询明显包含新信息。

怎么回事?

附注:如果这很重要,我会使用主键contentid+fulldate (b树,唯一)。

另注:以下是按如下要求显示的'SHOW CREATE TABLE sf_forecasts‘结果:

代码语言:javascript
运行
复制
sf_forecasts    CREATE TABLE `sf_forecasts` (
`contentid` int(11) NOT NULL,
`fulldate` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`listingTitle` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`location` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`dayofmonth` smallint(2) NOT NULL,
`dayofweek` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`minTempF` smallint(4) NOT NULL,
`maxTempF` smallint(4) NOT NULL,
`minTempC` smallint(4) NOT NULL,
`maxTempC` smallint(4) NOT NULL,
`skyCondition` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`precip` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`snowPotential` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`wind` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`minTempF_custom` smallint(4) DEFAULT NULL,
`maxTempF_custom` smallint(4) DEFAULT NULL,
`minTempC_custom` smallint(4) DEFAULT NULL,
`maxTempC_custom` smallint(4) DEFAULT NULL,
`baseH_custom` smallint(4) DEFAULT NULL,
`baseL_custom` smallint(4) DEFAULT NULL,
`topH_custom` smallint(4) DEFAULT NULL,
`topL_custom` smallint(4) DEFAULT NULL,
`skyCondition_custom` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`precip_custom` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`snowPotential_custom` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`wind_custom` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
`icon` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`icon_custom` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
`shortrange_custom` varchar(5000) COLLATE utf8_unicode_ci DEFAULT NULL,
`longrange_custom` varchar(5000) COLLATE utf8_unicode_ci DEFAULT NULL,
`scCode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`scUpdate` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`lastUpdate` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`skys` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`contentid`,`fulldate`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-13 10:11:52

问题在于定义的数据类型长度和要更新的数据长度存在差异

您的位置是varchar(10),并且您正在尝试插入14 characters

票数 2
EN

Stack Overflow用户

发布于 2012-12-13 10:26:54

您始终可以在查询执行后检查是否有错误:

代码语言:javascript
运行
复制
SHOW ERRORS;

SHOW WARNINGS;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13851712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档