Jaka jest różnica między pojedynczymi i podwójnymi cudzysłowami w SQL?

Jaka jest różnica między pojedynczymi i podwójnymi cudzysłowami w SQL?

Author: OMG Ponies, 2010-01-02

5 answers

Pojedyncze cudzysłowy są używane do wskazania początku i końca ciągu znaków w SQL. Podwójne cudzysłowy na ogół nie są używane w SQL, ale mogą się różnić w zależności od bazy danych.

Trzymaj się stosowania pojedynczych cudzysłowów.

To i tak podstawowe zastosowanie. Możesz użyć pojedynczych cudzysłowów jako aliasu kolumn - gdzie chcesz, aby nazwa kolumny, do której odwołujesz się w kodzie aplikacji, była czymś innym niż nazwa kolumny w bazie danych. Na przykład: PRODUCT.id byłoby bardziej czytelne jako product_id, więc używasz jednego z poniższych:
  • SELECT PRODUCT.id AS product_id
  • SELECT PRODUCT.id 'product_id'

Albo działa w Oracle, SQL Server, MySQL ... ale wiem, że niektórzy mówili, że Toad IDE wydaje się dawać trochę smutku przy użyciu podejścia pojedynczych cudzysłowów.

Musisz używać pojedynczych cudzysłowów, gdy alias kolumny zawiera znak spacji, np. product id, ale nie jest zalecana praktyka, aby alias kolumny był więcej niż jednym słowem.

 116
Author: OMG Ponies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-12 17:52:24

Pojedyncze cudzysłowy oddzielają stałą łańcuchową lub stałą daty/czasu.

Podwójne cudzysłowy ograniczają identyfikatory np. nazw tabel lub kolumn. Jest to zwykle konieczne tylko wtedy, gdy identyfikator nie pasuje do reguł dla prostych identyfikatorów.

Zobacz też:

Możesz sprawić, że MySQL będzie używał podwójnych cudzysłowów zgodnie ze standardem ANSI:

SET GLOBAL SQL_MODE=ANSI_QUOTES

Możesz użyć Microsoft SQL Server podwójne cudzysłowy według standardu ANSI:

SET QUOTED_IDENTIFIER ON
 57
Author: Bill Karwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:29
  • [S] cytaty ingle są dla [S ]trings; [D ]cytaty ouble są dla [D ]identyfikatorów atabase;
  • The ` symbol jest taki sam jak " symbol. Możesz użyć " z włączonym ANSI_QUOTES.
 45
Author: PSyLoCKe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-17 13:59:26

W ANSI SQL, podwójne cudzysłowy cytują nazwy obiektów (np. tabele), co pozwala im zawierać znaki niedozwolone w inny sposób lub być takie same jak słowa zarezerwowane(unikaj tego, naprawdę).

Pojedyncze cudzysłowy są dla ciągów.

MySQL jest jednak nieświadomy standardu (chyba że jego SQL_MODE zostanie zmieniony) i pozwala na ich wymienne użycie dla ciągów.

Ponadto Sybase i Microsoft używają również nawiasów kwadratowych do cytowania identyfikatorów.

Więc to trochę dokładnie.

Inne bazy danych takie jak Postgres i IBM faktycznie przestrzegają standardu ansi:)

 31
Author: MarkR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-02 18:40:22

Używam tego mnemoniku:

  • pojedyncze cudzysłowy są dla ciągów (jedna rzecz)
  • podwójne cudzysłowy są nazwami tabel i nazw kolumn (dwie rzeczy)

To nie jest w 100% poprawne według specyfikacji, ale ten mnemonic mi pomaga (człowiek).

 6
Author: guettli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-01 14:05:55