Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-为什么索引列上的select语句返回索引信息,而不是列数据?_Mysql - Fatal编程技术网

MySQL-为什么索引列上的select语句返回索引信息,而不是列数据?

MySQL-为什么索引列上的select语句返回索引信息,而不是列数据?,mysql,Mysql,我有一个存储活动日志的表(InnoDB)。每行都有一个用户id、一个活动id和位置数据。用户id和活动id列被编入索引,但不是唯一的 当我查询选择*时,返回的数据看起来正常- select * from table 当我用另一列(甚至是这两列)查询用户id或活动id时,数据看起来正常 select user_id, city from table select user_id from table where city = 'boulder' 当我使用where语句仅查询用户id或活动id

我有一个存储活动日志的表(InnoDB)。每行都有一个用户id、一个活动id和位置数据。用户id和活动id列被编入索引,但不是唯一的

当我查询
选择*
时,返回的数据看起来正常-

select * from table
当我用另一列(甚至是这两列)查询用户id或活动id时,数据看起来正常

select user_id, city from table
select user_id from table where city = 'boulder'
当我使用where语句仅查询用户id或活动id时,数据看起来正常

select user_id, city from table
select user_id from table where city = 'boulder'
当我只查询用户id或活动id,或者只查询同一列上带有where语句的id和子字符串查询时,就会出现问题

select user_id from table

返回的数据不是字段中的数据,而是看起来像索引位置(或类似位置)的数据。我删除了索引,问题得到了解决,但当我重新添加索引时,问题又出现了

不带索引的示例-

user_id   
-------
123456789
231234567
234567543
带索引的示例-

user_id
-------
081357652234
100000000000000
1000000000011
我尝试重新启动服务器,然后从api重新加载数据,但没有任何帮助。我已经在同一数据库中的其他表上进行了测试,但没有遇到此问题

这是我在配置中犯的错误还是错误?

我会:

  • 更改表的名称(我看到您将其更新为user_activity)以避免可能的错误,因为表名也是sql中的一个关键字
  • 对数据库进行备份
  • 运行
    检查表用户\u活动
    查看错误
  • 检查用户id是否为int类型
更新:从您的一条评论中可以看出,user_id是varchar,您可能遇到了一些错误,因为查询返回的第二个和第三个id看起来像二进制。
在使用InnoDB时,您不能运行
REPAIR
,但可以查看。转储数据库并重新加载它,以查看您的问题是否是间接的,或者无论发生什么情况都会持续发生。

这些用户ID(081357652234和10000000000000)是否不在表中?添加索引可能只是改变了返回结果的顺序。@davidfg4如果这些ID在表中,那么问题就更糟了,因为where子句应该只返回包含12345的ID。在任何情况下,如果问题仅在此表上出现,则运行
检查表“table”
进行良好的澄清可能会很有用-它们不在表中。用户id长度限制为12个字符。版本为5.5.31。您如何命名索引?谢谢Joe,我将尝试此操作。我不得不等待一夜之间转储并重新加载数据库,因为它太大了。问题仍然存在。关于varchar创建错误,您似乎是对的-我创建了一个表的副本,删除了索引,将用户id数据类型更改为int,然后重新创建了索引。现在可以了。奇怪的是,这似乎修复了activity_id列(它已经是int数据类型)。谢谢