1

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

当我查询select *返回的数据看起来很正常 -

select * from table

当我使用另一列(甚至是这 2 列)查询用户 ID 或活动 ID 时,数据看起来很正常。

select user_id, city from table

当我使用 where 语句仅查询用户 ID 或活动 ID 时,数据看起来很正常。

select user_id from table where city = 'boulder'

当我仅查询用户 ID 或活动 ID 或仅使用子字符串查询在同一列上使用 where 语句查询用户 ID 或活动 ID 时,就会出现问题。

select user_id from table

或者

select user_id from table where substring(user_id, 1,5) = '12345'

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

没有索引的例子 -

user_id   
-------
123456789
231234567
234567543

索引示例 -

user_id
-------
081357652234
100000000000000
1000000000011

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

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

4

1 回答 1

2

我会:

  • 更改表的名称(我看到您将其更新为 user_activity)以避免由于表名也是 sql 中的关键字而可能出现的错误
  • 备份数据库
  • 运行check table user_activity错误
  • 检查 user_id 是否为 int 类型

更新:正如我从您的一条评论中看到的,user_id 是一个 varchar,您可能遇到了一些错误,因为您的查询返回的第二个和第三个 id 看起来像二进制文件。当您使用 InnoDB 时,您无法运行REPAIR,但您可以查看this。转储数据库并重新加载它以查看您的问题是否是间接的或无论如何都持续发生也可能是一个好主意。

于 2013-08-15T15:57:44.663 回答