복붙노트

[SQL] 는 SQL 표준 역 따옴표 ( ')의 사용에 대해 무엇을 말하는가?

SQL

는 SQL 표준 역 따옴표 ( ')의 사용에 대해 무엇을 말하는가?

나는 PHP / MySQL의에서는 mysql_query를 사용하여 간단한 SQL 쿼리를 () 디버깅 시간을 보냈다 번만 나는 테이블 이름 주위 bactick을 놓쳤다 것을 깨닫게합니다. 그때부터 나는 항상 그것을 주변에 테이블 이름을 사용하고 있었다.

내가 SQLite는 / C에서와 동일하게 사용 때 ++, 기호조차 인식되지 않습니다. 이 사용 여부, 혼란? 무슨 일이 그것의 사용에 대한 표준 말을합니까?

따옴표와 때를 사용하지 않을 때 사람이 말해 줄 수 있다면 또한, 도움이 될 것입니다. 나는 값과 필드 이름을 주위 의미한다.

해결법

  1. ==============================

    1.표준 SQL (현재 버전은 ISO / IEC 9075입니다 : 여러 부분에서 2011 년)에 '백 틱'또는 '다시 따옴표'기호 (유니 코드 U + 0060 또는 액센트)에 대해 아무것도 말하지 않는다; 그것은 SQL에 나타날 수있는 특별한 의미를 가진 문자로 인식하지 않습니다.

    표준 SQL (현재 버전은 ISO / IEC 9075입니다 : 여러 부분에서 2011 년)에 '백 틱'또는 '다시 따옴표'기호 (유니 코드 U + 0060 또는 액센트)에 대해 아무것도 말하지 않는다; 그것은 SQL에 나타날 수있는 특별한 의미를 가진 문자로 인식하지 않습니다.

    식별자를 인용에 대한 표준 SQL 메커니즘은 큰 따옴표로 묶어야 구분 식별자로이다 :

    SELECT "select" FROM "from" WHERE "where" = "group by";
    

    MySQL의에서, 그가 기록 될 수 있습니다 :

    SELECT `select` FROM `from` WHERE `where` = `group by`;
    

    MS SQL Server에서 그가 기록 될 수 있습니다 :

    SELECT [select] FROM [from] WHERE [where] = [group by];
    

    는 SQL 표준 표기법 문제는 C 프로그래머가, 따옴표로 문자열을 둘러싸는 데 사용하므로 대부분의 DBMS는 표준에 의해 인식되는 작은 따옴표에 대한 대안으로 따옴표를 사용하는 것입니다. 그러나 문제와 그 다음 잎 당신은 식별자를 둘러싸하고자 할 때.

    마이크로 소프트는 하나의 접근 방식을했다; MySQL은 다른했다; 인포믹스는 단일 및 이중 따옴표의 상호 교환 사용할 수 있습니다,하지만 당신은 구분 식별자를 원하는 경우, 당신은 환경 변수를 설정 한 다음 표준 (문자열을 작은 따옴표, 식별자에 대한 따옴표)를 따라야한다; DB2는 표준, AFAIK를 다음; SQLite는 표준을 따르도록 표시; 오라클은 표준을 따르도록 표시; 사이베이스는 (- SQL 서버가 너무 큰 따옴표를 허용 할 수 있습니다 의미 MS SQL 서버와 같은) 중 큰 따옴표 (표준) 또는 대괄호를 할 수 있도록 나타납니다. 모든이 페이지 문서 이러한 서버 (내 지식의 격차 밖으로 도움이 충만했다), 및 메모 구분 식별자 내부의 문자열은 대소 문자를 구분인지 여부.

    식별자 주위에 인용 메커니즘을 사용하는 경우에 관해서는, 나의 태도는 '절대'없습니다. 음, 확실히 적이 있지만 절대적으로 그렇게 강제로하지 않을 때.

    그 구분 식별자는 대소 문자를 구분 참고; "에서"입니다 및 "보낸 사람"다른 열을 참조 (대부분의 DBMS에 - 위의 URL 참조). SQL의 대부분은 대소 문자를 구분하지 않습니다; 사용할 경우 알아야 할 성가신입니다. (은 SQL 표준은 메인 프레임 방향을 가지고 - 그것은 이름이 대문자로 변환 할 것으로 예상 대부분의 DBMS는하지만, 소문자를 위해 이름을 변환 할 수 있습니다.)

    일반적으로, 당신은 당신이 사용하는 SQL의 버전 키워드입니다 식별자를 구분해야합니다. 대부분의 표준 SQL의 키워드의 의미, 플러스 당신이 사용하는 특정의 구현 (들)의 일부인 엑스트라.

    문제 중 하나는 지속적인 소스 버전 N의 키워드 아니었다 열 이름이 릴리스 N + 1의 키워드가된다 업그레이드입니다. 업그레이드 후 작동을 중지하기 전에 일 SQL을 기존. 그런 다음, 단기 조치로 적어도, 당신은 이름을 인용 강제로 할 수있다. 그러나 사건의 통상적 인 과정에서, 당신은 식별자를 인용 할 필요 않도록하는 것을 목표로한다.

    물론, 나의 태도는 대부분의 DBMS가 질식있는 반면 (나는 주로 작업 것입니다) 인포믹스는, 그대로이 SQL을 받아 들인다는 사실에 의해 착색한다 :

    CREATE TABLE TABLE
    (
        DATE    INTEGER NOT NULL,
        NULL    FLOAT   NOT NULL,
        FLOAT   INTEGER NOT NULL,
        NOT     DATE    NOT NULL,
        INTEGER FLOAT   NOT NULL
    );
    

    물론, 데모 목적 이외의 다른 어떤 것도 그런 말도 안되는 테이블을 생성하는 사람은 등분, 그린 후 잔류가 만든 난장판을 수정해야한다, 중단해야한다. 그러나, 고객이 일상적으로 히트를 관리하는 몇 가지 한계 내에서, 키워드는 많은 상황에서 식별자로 사용할 수 있습니다. 즉, 자신의 미래 - 교정의 유용한 형태입니다. 단어가 키워드가되면, 기존의 코드는 변화에 의해 영향을받지 계속 작동하는 적당한 기회가있다. 그러나, 메커니즘은 완벽하지 않다; 당신은 PRIMARY라는 열이있는 테이블을 만들 수는 없지만, 이러한 열을 추가 할 테이블을 변경할 수 있습니다. 이 특이성에 대한 이유는,하지만 설명하기 어렵다.

  2. from https://stackoverflow.com/questions/10573922/what-does-the-sql-standard-say-about-usage-of-backtick by cc-by-sa and MIT license