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?


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 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


17

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

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

Backtick - `Business Name`- Dobrze


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ą.


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] ...

-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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.