不同的结果在不同的mysql服务器版本 - Hibernate API

时间:2018-01-09 07:30:33

标签: mysql hibernate jpa

我使用JPA(Hibernate)和spring boot项目。问题是相同的应用程序在具有不同mysql-server版本的不同服务器上运行。来自ORM的查询是:

select
        distinct distributo0_.id as id1_0_,
        distributo0_.address as address2_0_,
        distributo0_.city as city3_0_,
        distributo0_.email as email4_0_,
        distributo0_.first_name as first_na5_0_,
        distributo0_.last_name as last_nam6_0_,
        distributo0_.phone as phone7_0_,
        distributo0_.country as country8_0_,
        distributo0_.created as created9_0_,
        distributo0_.latitue as latitue10_0_,
        distributo0_.longitude as longitu11_0_,
        distributo0_.name as name12_0_,
        distributo0_.postal_code as postal_13_0_,
        distributo0_.status as status14_0_,
        distributo0_.type as type15_0_,
        distributo0_.last_update as last_up16_0_,
        distributo0_1_.merchandiser_id as merchand1_1_ 
    from
        distributor distributo0_ 
    left outer join
        distributor_merchandiser distributo0_1_ 
            on distributo0_.id=distributo0_1_.distributor_id 
    where
        distributo0_.name=? limit ?

它应根据经销商名称返回两个结果 - 例如:名称为“ГАДИСТРОЙ”。 它适用于:

mariadb-server 5.5.56-2.el7

mysql-server 5.1.73-7.el6

并没有继续工作 mysql-community-server 5.7.20-1.el6 (同一个数据库没有结果)

2 个答案:

答案 0 :(得分:2)

您似乎正在使用LIMIT子句运行查询,但没有ORDER BY子句。不提供默认排序列及其方向,将使用默认排序方法,因此结果可能无法预测,并且可能会改变两个服务器中的结果。

我建议在两个服务器上的查询中添加ORDER BY子句并再次测试。

另外,尝试比较两个服务器中表的字符集。在相关表上运行SHOW CREATE TABLE table并比较字符集。它应该是相同的,否则在比较查询时会发生奇怪的事情。

另外,您确定两台服务器中的数据是否相同?

答案 1 :(得分:0)

非常感谢你们!我学到了一些新东西。该问题与数据库的整理有关。在我更改了整理并设置

之后
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

一切正常。