Jak wybrać nazwę kolumny ze spacją w MySQL [duplikat]

93

Pracuję nad projektem, w którym inny programista utworzył tabelę z nazwami kolumn, takimi jak 'Business Name'. To jest odstęp między dwoma słowami. Jeśli uruchomię SELECTwyciąg z „Business Name”, oznacza to, że nie ma kolumny z nazwą „Business”.

Jak mogę rozwiązać ten problem?

ehp
źródło
Nie mam wystarczającej reputacji, aby poprawnie komentować, więc na końcu oznaczono: Rozwiązanie zamieszczone powyżej w komentarzach: `denerwująca_tabela`.` Nazwa firmy` nie działa dla mnie w mySQL w instrukcji where. Usunięcie cudzysłowów w nazwie tabeli zadziałało: tj. Denerwująca_tabela. „Nazwa firmy”
Tim0th1

Odpowiedzi:

163

Generalnie pierwszym krokiem jest, aby tego nie robić, ale jeśli to już zostało zrobione, musisz uciec się do poprawnego cytowania nazw kolumn:

SELECT `Business Name` FROM annoying_table

Zwykle tego rodzaju rzeczy są tworzone przez ludzi, którzy używali czegoś takiego jak Microsoft Access i zawsze używają GUI do robienia swoich rzeczy.

tadman
źródło
@tadman Jeśli skopiuję i wkleję twoje zapytanie, to działa, ale jeśli wpiszę pojedynczy cytat z klawiatury, nie działa. to znaczy. WYBIERZ „Business Name” FROM irytująca_tabela nie działa
ehp
17
Dzieje się tak, ponieważ nie są to pojedyncze cudzysłowy, ale raczej symbole zaznaczenia, które zwykle można znaleźć na klawiaturze po lewej stronie od cyfry 1.
peterm
5
Istnieją trzy rodzaje cudzysłowów: pojedyncze ', podwójne "i odwrócone `. W MySQL pierwsze dwa są równoważne i mogą być używane zamiennie. Nie zawsze ma to miejsce na innych platformach, a Postgres w szczególności traktuje je inaczej. Backticks są używane tylko do ucieczki nazwy bazy danych lub kolumny.
tadman
nawiasy [] nie działały dla mnie. Brak błędów, ale po prostu go nie wyświetlałem. `z drugiej strony działał świetnie.
Jay
1
@Robert Następnie napisałbyś to w ten sposób: `denerwująca_ tabela`.` Nazwa firmy`.
Erik Čerpnjak
20

Jeśli podwójne cudzysłowy nie działają, spróbuj umieścić ciąg w nawiasach kwadratowych.

Na przykład:

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

można zmienić jako

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

Ojcze Mathew
źródło
17

Zamiast pojedynczych cudzysłowów musisz użyć znaku wstecznego:

Pojedynczy cudzysłów - 'Business Name'- Źle

Backtick - `Business Name`- Dobrze

Saurabh
źródło
3

Dla każdego własnego, ale właściwym sposobem kodowania jest zmiana nazw kolumn poprzez wstawienie podkreślenia, aby nie było luk. Zapewni to zero błędów podczas kodowania. Podczas drukowania nazw kolumn do publicznego wyświetlania możesz wyszukać i zamienić, aby zastąpić podkreślenie spacją.

Valmiki
źródło
0

Dostałem się tutaj z problemem MS Access.

Backticks są dobre dla MySQL, ale powodują dziwne błędy, takie jak „Invalid Query Name: Query1” w MS Access, tylko dla MS Access, użyj nawiasów kwadratowych:

To powinno wyglądać tak

SELECT Customer.[Customer ID], Customer.[Full Name] ...
kztd
źródło
-3

Myślę, że podwójne cudzysłowy też działają:

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

Ale testowałem tylko na SQL Server, a NIE mySQL na wypadek, gdyby ktoś pracował z MS SQL Server.

Vin.X
źródło
5
Spowoduje to zawsze wybranie ciągu „Business Name”, a nie zawartości kolumny.
JonasB
@JonasB Proszę sprawdzić jeszcze raz, użyłem podwójnego cudzysłowu, a nie pojedynczego cudzysłowu .... Pojedynczy cudzysłów da w wyniku ciąg, podwójny cudzysłów nie będzie.
Vin.X
Pytanie dotyczyło w szczególności MySQL i na serwerze MySQL ze standardowymi ustawieniami, podwójne cudzysłowy i pojedyncze cudzysłowy są równoważne. Zobacz tę odpowiedź, aby uzyskać dalsze informacje, dlaczego używanie podwójnych cudzysłowów w MySQL jest po prostu złym pomysłem: stackoverflow.com/a/14123649/4172652
JonasB