почему в имени таблицы может быть заполнитель int при использовании mysql?

#mysql

Вопрос:

на этой неделе я столкнулся со странным случаем при использовании mysql.
Версия сервера mysql-mysql 5.7.22,
версия драйвера jdbc-8.0.23.
Как я знаю, в имени таблицы не может быть заполнителей.
Но следующий код может быть выполнен нормально.

 PreparedStatement ps = conn.prepareStatement("select count(1) from g_?");
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
    System.out.println(rs.getInt(1));
}
 

Но если вы используете ps.setString(1, «1»);
произойдет ошибка сервера mysql.
Таблица создается с помощью
create table g_1(t int not null) .
Я не смог найти никакой ссылки в документе mysql.
Очень признателен за любое предложение.

Комментарии:

1. Я не думаю, что это имеет какое-либо отношение к mysql, в данном случае замена, похоже, выполняется на стороне клиента.

2. @Тень, похоже, ты прав. Подготовка и привязка выполняются на стороне клиента, и, похоже, в oracle поведение preparedstatment отличается. Кстати, я отлаживаю исходный код java mysql connector всего на некоторое время, требуется дополнительное подтверждение.

Ответ №1:

Вывод:
Подготовка и привязка инструкции sql выполняются клиентом mysql,
в отличие от многих СУБД, таких как oracle, поскольку этап подготовки обрабатывается на стороне сервера
для обеспечения мягкого анализа для ускорения производительности.
Так что такой код, возможно, просто подходит для mysql.