mysql - mysql查询中字符串中的连字符导致奇怪的行为

标签 mysql sql ruby-on-rails database

在我的 Rails 测试环境中,我有一个类似于 1234-567abc89user_id。通过在不同的表中查询此用户,我得到了不一致的行为。大多数查询都有效,但运行一个特定查询失败:

ActiveRecord::StatementInvalid (Mysql::Error: Unknown column '1234' in 
'where clause': SELECT * FROM `point_allocations` WHERE (user_id = 1234-567abc89) ):

所以出于某种原因,连字符以外的所有内容都被切断了。我意识到对于有效的查询,它正在查找用户 1234 而不是 1234-567abc89,但是如果所有其他的都有效,知道为什么只有这个会返回错误?

最佳答案

您需要包含引文。

SELECT * FROM `point_allocations` WHERE (user_id = '1234-567abc89')

因为 user_id 列需要字符类型的数据,它会采用您的值 (1234-567abc89) 并将其解析为整数,截断连字符后的内容。如果您将其包含在引号中,它会将其作为字符串接受并正确传输。

祝你好运!

关于mysql - mysql查询中字符串中的连字符导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475349/

相关文章:

ruby-on-rails - 如何测试 Devise 用户是使用 RSpec 使用正确的密码创建的

ruby-on-rails - 如何判断哪个关联模型未通过ActiveRecord验证?

sql - DB2 - SQL-将结果限制为某个列中某个值仅出现几次

php - 我可以向 Android Studio 中的现有项目添加新包吗?

php - 仅当给定列只有一个值时才返回行

php - 如何在php中与ZK考勤机数据库进行交互?

SQL Between 子句返回超出界限的值的行

sql - 如何根据单个列值有条件地限制结果

javascript - rails : displaying a value dynamically calculated in my form

mysql - 在cPanel上恢复不同名称的MySQL数据库