MySQL在执行integer和varchar ID之间的匹配时不匹配所需的记录

MySQL在执行integer和varchar ID之间的匹配时不匹配所需的记录,mysql,join,integer,left-join,varchar,Mysql,Join,Integer,Left Join,Varchar,我正在做一个查询,即: SELECT `Transaction`.`id`, `Transaction`.`total`, `Transaction`.`customer_id`, `Customer`.`id`, `Customer`.`full_name` FROM `mydb`.`transactions` AS `Transaction` LEFT JOIN `mydb`.`users` AS `Customer` ON ( `Tr

我正在做一个查询,即:

SELECT
    `Transaction`.`id`,
    `Transaction`.`total`,
    `Transaction`.`customer_id`,
    `Customer`.`id`,
    `Customer`.`full_name`
FROM
    `mydb`.`transactions` AS `Transaction`
LEFT JOIN `mydb`.`users` AS `Customer` ON (
    `Transaction`.`customer_id` = `Customer`.`id`
)
WHERE
    `Transaction`.`customer_id` = '573edc-fa84-44a2-9bce-0d650ab724ab'
LIMIT 1
请看下面的结果(不正确):

在Transactions表中,“customer_id”字段是一个varchar(255)字段,“users”表中的id字段是一个整数(11)字段。我需要保留customer_id字段varchar,因为它应该为来宾用户存储36个字符长的随机字符串。在此查询中,它将customer_id视为整数,因此会截断整数值之后的所有内容,并将其与实际用户id 573匹配

当我这样做一个连接时,它匹配一个用户ID为573的记录。我不确定我应该怎么做才能正确匹配记录。在这种情况下,实际上users表中不应该有记录,因为它是由来宾用户在不登录的情况下完成的事务

这附近的工作是什么?我不打算将user id字段更改为varchar,或将customer_id更改为integer,但仍然希望进行正确的匹配


我正在使用CakePHP,但我认为这并不重要,因为当我直接在phpmyadmin中运行它时,它会给我相同的结果。

在on语句中有一个transaction.customer\u id的隐式整数转换,由于转换只查看数字部分,因此转换结果的值为573,因此您将获得与users.customer\u id的匹配。您需要在join语句中将users.customer\u id转换或强制转换为char。

当然没有。有任何解决方法吗??无论如何,谢谢你投了反对票!!解决什么问题的办法?使用相同的数据类型存储相应的密钥。我不能。这是一个相当大的系统,有几十个使用相同结构的网站,并与各个数据库共享代码。但我需要一个修复程序,可以修复这个错误在所有网站上一次。客户id和用户id在多个地方被使用,因此没有办法替换它们。这里没有bug。dba的设计有很大的缺陷。是的,这看起来像是一个答案。正在做这个。谢谢