这个是导出的统计信息。但是user表导出报错,说字段长度不够,这样的错,tidb日志里面报好多次了。每次报错,我都是更改字段长度来解决的。但是现在日志里面没有报错,导出统计信息报错了。需要我更改字段之后再导出统计信息给你吗?
请问下集群是否打开了 new-collation?
select * from mysql.tidb where VARIABLE_NAME = “new_collation_enabled”;
能否重复得到走 pointGet 的结果? 因为 user_id 的 collation 是 general_ci, 所以该查询无法进行常量传播。
我单独执行sql是可以的,完全就是pointGet。执行多次都是一样的,不会变,但是程序端连接的,就是另一个执行计划,都是超过500ms以上的,都是慢日志。不知道咋回事
确认下单独执行 sql 时连接的 tidb 和后台执行的是否一样?
确定是一样的,单独执行是连接的中间haproxy,程序端连接的也是中间件。我单独拿一台tidb连接,执行的结果也是一样会走pointGet
u.user_id = ‘zm123456’ 换成 iub.user_id = ‘zm123456’ 试试两边的执行结果呢?
麻烦确认下:
show variables like “%collation%”;
后台连接时的也确认下。应该是这两处不同导致的。
是collation_server 和collation_database不一致导致的吗?
collation_connection 会影响常量传播的规则,具体是否是 bug 我还得再研究下,可以先通过 u.user_id = ‘zm123456’ and iub.user_id = ‘zm123456’ 绕过去。
好的感谢
@blaine
已经确认是 bug:https://github.com/pingcap/tidb/issues/22665, 将在后续版本中修复。
推荐绕过方式是设置连接时的 collation 为 utf8mb4_bin, 同时显式的指定 u.user_id = ‘zm123456’ and iub.user_id = ‘zm123456’ 。
该表中使用了混合的字符集与排序规则,既有 utf8mb4_general_ci,还有utf8_bin。在连接的 collation 设置为 utf8_general_ci 时有可能进行不正确的常量传播。建议以后使用一致的 utf8mb4_general_ci 或者 utf8mb4_bin。
好的,非常感谢
好的,感谢
ims_user_login_config
(→
id
int(11) NOT NULL AUTO_INCREMENT COMMENT ‘’,→
register_name
varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘’,→
is_register_unique
varchar(5) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘0’ COMMENT ‘’,→
is_not_null
varchar(5) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘0’ COMMENT ‘’,→
is_set_register_term
varchar(5) COLLATE utf8mb4_general_ci NOT NULL DEFAULT ‘0’ COMMENT ‘’,→
is_open_phone_code
tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘’,→
create_time
datetime DEFAULT NULL COMMENT ‘’,→
create_by
varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘’,→
update_time
datetime DEFAULT NULL COMMENT ‘’,→
update_by
varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘’,→
register_field_name
varchar(25) COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘’,→
is_open_phone_register
tinyint(1) DEFAULT ‘1’ COMMENT ’ 0 1’,→
ali_or_vonage
tinyint(1) DEFAULT ‘0’ COMMENT ‘:0 Vonage 1 ‘,→ PRIMARY KEY (
id
)→ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci AUTO_INCREMENT=90029 COMMENT=’’;这个是表结构,我再测试环境测试是没有问题的,但是我生产环境除了更改collation,其他没有改动啊。
已经知道问题了。已解决,