datagrip2020.1 连接 tidb 字符集问题

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:4.0
  • 【问题描述】:
    使用datagrip的mysql驱动连接tidb报错,检查所有数据库、表、字段,均无字符集utf8mb4对应排序utf8_general_ci情况。数据库、表也无使用排序utf8_general_ci
    datagrip2020.1 (试用)
    该问题导致不能显示连接schema
[42000][1253] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'.
COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
1 个赞

使用tidb_skip_utf8_check也无作用


MySQL [(none)]> set @@tidb_skip_utf8_check=1;
Query OK, 0 rows affected (0.05 sec)

MySQL [(none)]> select @@tidb_skip_utf8_check;
+------------------------+
| @@tidb_skip_utf8_check |
+------------------------+
| 1                      |
+------------------------+
1 row in set (0.00 sec)

看起来是 charset 与 collation 对不上导致的,这边的连接能够设置 COLLATION 为 “utf8mb4_general_ci” 吗? 另外针对大小写不敏感的排序规则需要在 4.0 使用新的框架进行支持,具体可以参考:
https://pingcap.com/docs-cn/stable/reference/sql/characterset-and-collation/#新框架下的排序规则支持

连接加上了COLLATION 为 “utf8mb4_general_ci” 也是不行,是我的方式不对吗
jdbc:mysql://192.168.10.202:4000?connectionCollation=utf8mb4_general_ci
目前是4.0.也能支持不敏感查询,这一块没有问题

这样也不行

jdbc:mysql://192.168.10.202:4000?collation_connection=utf8mb4_general_ci

报错是utf8_general_ci不是utf8mb4_general_ci,使用utf8_general_ci字符集的只有默认数据库mysql中的一个字段

麻烦看看当前服务器的 charset 设置:SHOW GLOBAL VARIABLES LIKE '%character%';SHOW COLLATION;

SELECT @@character_set_database, @@collation_database;

utf8mb4	utf8mb4_bin

SHOW GLOBAL VARIABLES LIKE ‘%character%’;

character_set_client	utf8mb4
character_set_connection	utf8mb4
character_set_database	utf8mb4
character_set_filesystem	binary
character_set_results	utf8mb4
character_set_server	utf8mb4
character_set_system	utf8
character_sets_dir	/usr/local/mysql-5.6.25-osx10.8-x86_64/share/charsets/

SHOW COLLATION;

ascii_bin	ascii	65	Yes	Yes	1
binary	binary	63	Yes	Yes	1
latin1_bin	latin1	47	Yes	Yes	1
utf8_bin	utf8	83	Yes	Yes	1
utf8_general_ci	utf8	33		Yes	1
utf8mb4_bin	utf8mb4	46	Yes	Yes	1
utf8mb4_general_ci	utf8mb4	45		Yes	1
  1. 这边报错时候使用的 jdbc 的连接字符串是怎样的。
  2. 请问其他 MySQL 工具连接 TiDB 会出现这种情况吗?如 MySQLclient 或者 MySQL workbench 等等.

报错时使用的字符串:

使用其他工具均正常:navicat、idea、toad连接都是没有问题,mysql驱动jdbc也没有问题

麻烦尝试一下这样的连接字符串: jdbc:mysql://192.168.10.202:4000?connectionCollation=utf8mb4_general_ci

还是同样的报错

请问 datagrip 连接 MySQL 有这个问题吗? 在一样的 character 配置下:

  • character_set_client utf8mb4
  • character_set_connection utf8mb4
  • character_set_database utf8mb4
  • character_set_filesystem binary
  • character_set_results utf8mb4
  • character_set_server utf8mb4
  • character_set_system utf8

mysql没有问题

报错的原因是 datagrip 2020.1 在连接 mysql 时,会执行下面的 sql

select table_name from information_schema.tables where table_schema collate utf8_general_ci = ‘information_schema’ and table_name collate utf8_general_ci=‘parameters’;

mysql 中 information_schema.tables 的字符集和 collaction 是 utf8,而 tidb 中该表是 utf8mb4,与 mysql 不兼容导致报错,可以使用其他 IDE 工具连接 tidb

3 个赞

好的,谢谢

:ok_hand:

information_schema.tables没有必要使用utf8mb4吧,DataGrip无法解析schema,就意味着Idea也无法解析schema。

v408 已经变成 utf8mb4 了,

properties->advanced->expert options ->Introspect Using JDBC meta data (:white_check_mark:)

6 个赞