具体问题
最近用DBeaver连接Mysql报Unknown system variable 'transaction_isolation'
具体分析
容我们来逐帧分析-DBeaver是一个免费的跨平台数据库连接工具;
其次我们得先有一个概念:transaction_isolation是MySQL中用来设置数据库事务的隔离级别的一个系统变量;在MySQL中,事务隔离级别决定了一个事务对其他事务的可见性以及并发操作时可能出现的问题。
常见的事务隔离级别包括:
-
读未提交(Read Uncommitted):一个事务可以读取另一个事务未提交的数据。
-
读已提交(Read Committed):一个事务只能读取另一个事务已经提交的数据。
-
可重复读(Repeatable Read):确保在同一事务中多次读取相同数据时,结果始终一致。
-
序列化(Serializable):最高的隔离级别,通过强制事务进行串行化顺序执行,避免了幻读和不可重复读的问题。
通过设置transaction_isolation变量,你可以指定所需的隔离级别,以满足你的应用程序的需求,并确保数据的一致性和可靠性。
下面是transaction_isolation和tx_isolation的恩怨情仇:
MySQL在5.7.20版本之前是使用tx_isolation作为事务隔离级别的一个系统变量,但是在5.7.20版本后引入了transaction_isolation作为别名被引入,甚至到了MySQL 8.0版本直接取代了tx_isolation。
所以现在知道为啥报错了吧——
-
当前的MySQL版本太低了,以至于transaction_isolation还未被MySQL引入,结果当然是Unknown;
-
驱动版本太高也会报Unknown system variable 'transaction_isolation'
个人实测 MySQL版本:10.8.3;驱动版本mysql-connector-java:6.0.5可以正常运行