SQL_MODE支持全局和SESSION级别的, SESSION
级别的 SQL 模式的变化只会影响当前的客户端。
以下临时修改SQL_mode我在mysql上测试是ok的,tidb下应该也是一样的。
[使用JDBC]
@Test
public void sessionSqlMode() {
String jdbcURL2 = "jdbc:mysql://localhost:3306/erp?sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'";
Connection connection = null;
try {
connection = DriverManager.getConnection(jdbcURL2, username, password);
Statement statement = connection.createStatement();
ResultSet sessionRS = statement.executeQuery("select @@SESSION.sql_mode");
if (sessionRS.next()){
System.out.println(sessionRS.getString(1));
sessionRS.close();
}
ResultSet globalRS = statement.executeQuery("select @@GLOBAL.sql_mode;");
if (globalRS.next()){
System.out.println(globalRS.getString(1));
globalRS.close();
}
connection.close();
} catch ( SQLException ex) {
try {
connection.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
ex.printStackTrace();
}
}
[使用shell]