Indexing Mysql 5.6同一查询的不同执行计划(Java客户端vs终端)

Indexing Mysql 5.6同一查询的不同执行计划(Java客户端vs终端),indexing,mysql-connector,jointable,sql-execution-plan,mysql-5.6,Indexing,Mysql Connector,Jointable,Sql Execution Plan,Mysql 5.6,下面的查询给出了GUI客户机DB Viz与终端之间的两种不同的执行计划,并且当我们从GUI/Java应用程序调用时,执行时间过长 -当我们从mysql客户端直接在服务器上执行来自mysql终端的查询时,查询的运行时间为亚秒。但当我们从Java应用程序/GUI客户端(如DBVIz)调用此查询时,需要55秒 -预期结果是我找到了执行计划更改的原因,服务器在从GUI客户端执行查询时未使用索引,因为varchar列上需要utf8mb4转换。之所以需要此转换,是因为java应用程序和GUI客户端中使用的j

下面的查询给出了GUI客户机DB Viz与终端之间的两种不同的执行计划,并且当我们从GUI/Java应用程序调用时,执行时间过长

-当我们从mysql客户端直接在服务器上执行来自mysql终端的查询时,查询的运行时间为亚秒。但当我们从Java应用程序/GUI客户端(如DBVIz)调用此查询时,需要55秒


-预期结果是我找到了执行计划更改的原因,服务器在从GUI客户端执行查询时未使用索引,因为varchar列上需要utf8mb4转换。之所以需要此转换,是因为java应用程序和GUI客户端中使用的j连接器根据服务器配置将以下2个变量设置为utf8mb4

字符集客户端 字符集连接

桌子是拉丁文的。但是,终端客户机没有使用j连接器,而是为上述2个变量保留latin1

我们是怎么解决的

J连接器根据服务器配置决定上述值,因此我们从服务器my.conf中删除了下面的2

默认字符集=utf8 字符集服务器=utf8

删除此项后,默认情况下,值设置为latin1,问题已解决。希望这将有助于未来,如果有人碰到同样的问题