Обратные кавычки (`) вместо одинарных (') в SQL-запросе?

5 янв. 2017 г., 00:33:46
Просмотры: 14.2K
Голосов: 3

У меня есть этот код, который частично показан здесь для краткости:

global $wpdb;
// создает таблицу jwp_bids в базе данных, если она не существует
$table = $wpdb->prefix . "jwp_bids"; 
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table (
    `id` mediumint(9) NOT NULL AUTO_INCREMENT,
    `bid_amt` text NOT NULL,

Когда я изначально набирал код, я использовал ' внутри скобок, и код не работал.

Затем я заменил одинарные кавычки на обратные, и код заработал идеально.

Пожалуйста, объясните:

  • Каков правильный термин для этих необычных кавычек :)
  • Почему используются именно они, а не '?
  • Это относится только к MySQL? WordPress? PHP?
  • Где я могу найти техническую документацию по этому вопросу, чтобы не беспокоить вас, замечательных людей?
sql
3
Комментарии

Что произойдет, если полностью убрать обратные кавычки, будет ли запрос все еще работать? Я почти уверен, что это особенность MySQL, связанная с интерпретацией имен столбцов как строк (при использовании одинарных кавычек) вместо их распознавания как столбцов (при использовании обратных кавычек или вообще без них).

Howdy_McGee Howdy_McGee
5 янв. 2017 г. 00:40:42

Я проверю это. Какой лучший справочный ресурс по MySQL, где такие вещи подробно объясняются?

James James
5 янв. 2017 г. 00:55:48

Итак, запрос действительно работает БЕЗ обратных кавычек. Какой технический справочник хорош для подобных деталей?

James James
5 янв. 2017 г. 01:49:16
Все ответы на вопрос 1
2

Обратные кавычки и обычные кавычки (одинарные и двойные) имеют разное значение в SQL. Кавычки обозначают строковый литерал, тогда как обратные кавычки используются для идентификаторов. Это не специфично для WordPress, а является общим способом в SQL для цитирования столбцов или таблиц.

Например, представьте, что вы выполняете запрос для сравнения двух столбцов:

SELECT * FROM wp_posts WHERE post_name = post_title

Если вы сравните с одинарными кавычками ('post_name' = 'post_title'), это будет сравнение строковых литералов, которые никогда не будут равны. Однако с обратными кавычками это будет ссылка на столбец.

Зачем вообще использовать обратные кавычки? Если столбец назван так же, как зарезервированное слово в SQL, или содержит пробел, вам нужно заключить его в кавычки. Например, если у вас есть столбец с именем count, вам нужно будет цитировать его каждый раз, когда вы на него ссылаетесь, так как COUNT() — это функция (и, следовательно, зарезервированное слово) в MySQL.

См. также https://dba.stackexchange.com/questions/23129/benefits-of-using-backtick-in-mysql-queries

5 янв. 2017 г. 03:44:04
Комментарии

"Если сравнить с одинарными кавычками ('post_title' = 'post_title'), это будет сравнение строковых литералов, которые никогда не равны." На самом деле они выглядят вполне равными. Возможно, вы хотели сказать 'post_name' = 'post_title'?

Frhay Frhay
25 июн. 2018 г. 19:45:43

Обратные кавычки — это не стандартный способ заключения столбцов или таблиц в SQL. Это специфика именно MySQL.

Juan Cespedes Juan Cespedes
25 окт. 2024 г. 12:29:24