MySQL 8.0.12 Windows 64位
我正在尝试建立一个SQL查询以按任何匹配的邮政编码搜索我的数据库,而我目前遇到了问题。我可以使用列名“邮政编码”进行选择,但是当我将其输入WHERE子句时,例如“邮政编码= 4000”,MySQL会告诉我该列未知。
当我试图寻找解决此问题的方法时(因为此错误消息非常普遍),我遇到了三种主要类型的典型解决方案。使用反引号还是不使用反引号,取决于您的列名中是否有空格等。由于查询的执行顺序,不完全依赖别名,并确保其他标点符号(例如引号)不会引起混淆。查询执行器。我已经尝试过使用反斜线,也可以不使用反斜线,而且我目前不依赖任何别名,但是我已经尝试过以不同的顺序使用别名以查看其是否有效,并且我删除了其他所有通常可疑的标点符号,但到目前为止没有任何效果
用于创建表的查询就是这样...
CREATE TABLE `postcodes` (
`?postcode` int(11) DEFAULT NULL,
`locality` text,
`State` text,
`long` double DEFAULT NULL,
`lat` double DEFAULT NULL,
`id` int(11) DEFAULT NULL,
`dc` text,
`type` text,
`status` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
我希望运行的查询就是这样...
SELECT postcode FROM au_locations.postcodes WHERE postcode = 4000;
...并且我已经尝试过修改该查询...
SELECT `postcode` FROM `au_locations`.`postcodes` WHERE `postcode` = 4000;
SELECT postcode FROM au_locations.postcodes WHERE au_locations.postcode = 4000;
...最让我感到困惑的是,该查询 本身完全可以正常运行,但是第二天我运行它,它就不再起作用...
SELECT postcode FROM au_locations.postcodes;
我遇到的错误就是这样...
错误代码:1054。“ where子句”中的未知列“邮政编码”
通过该查询,我希望仅输出值“ 4000”和标题“邮政编码”的单列单行表。我目前缺少任何重要的标识符或其他代码吗?
注意:数据库上似乎没有激活的任何触发器或其他参数,并且使用上述CREATE TABLE定义在另一个数据库中重建表的任何尝试都会产生相同的结果。该表最初是从CSV文件生成的,并且从所有外观上似乎都正确实施了CSV文件,只有当我查询WHERE邮政编码时,才会出现任何错误(所有其他列都可以正常工作)。
答案 0 :(得分:0)
感谢所有评论者和Progman提供的帮助(可以在此chat上进行讨论),该问题已解决。
通过在Windows上的MySQL客户端中运行SHOW CREATE TABLE,我能够发现一个附加字符,该附加字符可能未在字段名称“邮政编码”中正确编码,因此当我在运行与该字段有关的查询时,会混淆MySQL邮政编码”。这可能是与换行字符和其他在OS之间的操作略有不同的字符有关的错误,但是目前我还没有特别的证据来支持该理论(如果我找到原因,将会在注释中添加)。
要在Windows上查找MySQL客户端,可以在Windows搜索栏中搜索“ mysql”,也可以打开命令提示符并导航到MySQL文件夹所在的位置(最可能是C:\ Program Files \ MySQL),然后根据您使用的MySQL版本,您将需要在其他文件夹中运行mysql命令。在此处可以找到关于运行mysql命令打开客户端的更多信息documentation。
在发现此错误的原因之后,我在NotePad ++中重新输入了CSV文件列的标题,以确保没有其他潜伏字符,然后将CSV文件重新导入到现在可以使用的MySQL中。