【发布时间】:2013-04-12 08:05:14
【问题描述】:
我对这个问题进行了研究,到目前为止,我在 MySQL 手册、MySQL 错误报告、Stack Overflow 或其他论坛中所读到的任何内容都没有帮助。
我有一个简单的 mysql 选择查询:
SELECT * FROM `Toyota` WHERE `Toyota`.`CollisionEstimatingID` = '22028589';
此查询失败,mysql 错误代码 1054
WHERE子句中的未知列Toyota.CollisionEstimatingID
此列确实存在,我已经检查了数据库、表和列的拼写至少 30 次。我什至删除了我的数据库并重新导入。我试过用反引号和不带反引号,有别名和没有别名'我试过用显式命名的 table.column 语法,没有显式语法,我试过混合和匹配我所有的东西提到(表上的反引号,而不是列上的反引号,列上的但不是表名),似乎没有任何效果。当我从 Ubuntu 12.04 上的 mysql CLI 执行它时它失败,它从我的 PHP 5.3 代码中失败,并且它在 phpMyAdmin 内部失败。我已经准备好掀桌子了。
当我尝试这个时:
SELECT * FROM `Toyota`;
这没有任何问题吗?天哪,MySQL真是个逗比……
这是源自show create database Toyota;的表格设置
CREATE TABLE `Toyota` (
`CollisionEstimatingID` varchar(255) DEFAULT NULL,
`OE_part_number` varchar(255) DEFAULT NULL,
`Price` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
一个有趣的注释——我想知道它是否可能是字符编码问题?我确实通过使用show create table Toyota 并删除除“CollisionEstimatingID”之外的所有内容并使用它来形成 SELECT 语句,让它在 phpMyAdmin 中工作一次。但是当我尝试剪切和粘贴时,没有骰子。
我尝试使用 utf8 字符集重新创建数据库和表以查看是否有帮助,但没有帮助。我尝试将文本从 phpMyAdmin 窗口复制到我的源代码中——在列名的开头产生了一些时髦的字符——有点像这样:>>?CollisionEstimatingID 只是它是一个带有变音符号的“i”+ a双右雪佛龙和一个倒置的问号。
我被难住了。有人想测试他们的编程勇气并帮助兄弟吗?
【问题讨论】:
-
你是如何创建表格的?手型?文件导入?
-
@Passerby -- 我以编程方式创建了表我有大量 .txt 导出文件要解析和导入,我必须针对这些内容编写查询。
-
喜欢“”?这是 UTF-8 BOM (en.wikipedia.org/wiki/Byte_order_mark)。可能必须首先清理文件。
-
@KillerX -- 是的,就这样!
-
@KillerX 请将您的回复作为答案发布,我会接受。我认为这正是错误 - 列名是 .txt 文件中的第一个名称,我用 C++ 打开 .txt 转储文件,读取第一行,解析它,并将其转换为创建表语句,我必须拿起 BOM,它成为列名的一部分……难怪我的 SQL 查询不匹配……