Как выбрать имя столбца с пробелом в MySQL [дубликат]

93

Я работаю над проектом, в котором другой разработчик создал таблицу с именами столбцов, например 'Business Name'. Это пробел между двумя словами. Если я запускаю SELECTоператор с «Business Name», он говорит, что нет столбца с именем «Business».

Как я могу решить эту проблему?

эхп
источник
У меня недостаточно репутации, чтобы правильно комментировать, поэтому помечено в конце: решение, опубликованное выше в комментариях: `annoying_table`.` Business Name` не сработало для меня в mySQL в инструкции where. Удаление обратных кавычек в имени таблицы действительно сработало: например, annoying_table.`Business Name`
Tim0th1

Ответы:

163

Как правило, первый шаг - не делать этого в первую очередь, но если это уже сделано, вам нужно прибегнуть к правильному цитированию имен столбцов:

SELECT `Business Name` FROM annoying_table

Обычно подобные вещи создаются людьми, которые использовали что-то вроде Microsoft Access и всегда используют графический интерфейс для выполнения своих задач.

тадман
источник
@tadman Если я скопирую и вставлю ваш запрос, он будет работать, но если я наберу одинарную кавычку с клавиатуры, это не сработает. т.е. ВЫБРАТЬ «Название компании» ИЗ
annoying_table
17
Это потому, что это не одинарные кавычки, а скорее символы галочки, которые вы обычно можете найти на клавиатуре слева от цифры 1.
Петерм
5
Есть три вида кавычек: одинарные ', двойные "и обратные `. В MySQL первые два эквивалентны и могут использоваться взаимозаменяемо. На других платформах это не всегда так, и Postgres, в частности, относится к ним иначе. Обратные кавычки используются только для экранирования имени базы данных или столбца.
tadman 07
скобки [] у меня не работали. Ошибок нет, но просто не отображалось. `с другой стороны работал отлично.
Джей
1
@Robert Тогда вы бы написали это так: `annoying_table`.` Business Name`.
Эрик Черпняк
20

Если двойные кавычки не работают, попробуйте заключить строку в квадратные скобки.

Например:

SELECT "Business Name","Other Name" FROM your_Table

можно изменить как

SELECT [Business Name],[Other Name] FROM your_Table

Отец Мэтью
источник
17

Вам нужно использовать обратную кавычку вместо одинарных кавычек:

Одиночная кавычка - 'Business Name'- Неправильно

Обратный апостроф - `Business Name`- правильный

Саураб
источник
3

Каждому свое, но правильный способ закодировать это - переименовать столбцы, вставив подчеркивание, чтобы не было пробелов. Это гарантирует отсутствие ошибок при кодировании. При печати имен столбцов для публичного показа вы можете выполнить поиск и заменить, чтобы заменить подчеркивание пробелом.

Валмики
источник
0

Я попал сюда с проблемой MS Access.

Обратные кавычки хороши для MySQL, но они создают странные ошибки, такие как «Недопустимое имя запроса: Query1» в MS Access, только для MS Access используйте квадратные скобки:

Это должно выглядеть так

SELECT Customer.[Customer ID], Customer.[Full Name] ...
кзтд
источник
-3

Я думаю, что двойные кавычки тоже работают:

SELECT "Business Name","Other Name" FROM your_Table

Но я тестировал только на SQL Server, а не на mySQL, если кто-то работает с MS SQL Server.

Vin.X
источник
5
При этом всегда будет выбираться строка «Business Name», а не содержимое столбца.
JonasB
@JonasB Пожалуйста, проверьте еще раз, я использовал двойные кавычки, а не одинарные .... Одиночные кавычки приведут к строке, двойные кавычки не будут.
Vin.X
Вопрос был конкретно о MySQL и на сервере MySQL со стандартными настройками двойные и одинарные кавычки эквивалентны. См. Этот ответ для получения дополнительной информации, почему использовать двойные кавычки в MySQL - плохая идея: stackoverflow.com/a/14123649/4172652
JonasB