복붙노트

[SQL] 나는 SQL의 숫자를 인용해야 하는가?

SQL

나는 SQL의 숫자를 인용해야 하는가?

나는 SQL 쿼리를 수행 할 때 물건을 인용 대한 책을 읽은 기억과 당신이 뭔가를 인용 할 때 즉, 문자열이된다. 나는 또한 그 번호를 인용해서는 안 읽습니다. 지금, 나는 그 인용을 찾을 수 없습니다와 나는 숫자를 인용해야하는지 내 기억을 상기 할 필요가있다.

해결법

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

    1.당신은 숫자로 처리하려는 경우 숫자를 인용해서는 안된다.

    당신은 숫자로 처리하려는 경우 숫자를 인용해서는 안된다.

    당신은 그것을 문자열 수 있음을 기억하여 맞아요.

    SELECT 10 AS x
    

    완벽하게 합법적이고 (대부분의 데이터베이스 엔진에서) 데이터 형 INT의 열 반환 (또는 변화를.)

    이 작업을 수행하는 경우 :

    SELECT '10' AS x
    

    대신 당신은 텍스트 데이터 형식을 얻을 수 있습니다. 이 역시 경우에 적합 할 수 있지만 당신은 텍스트로 또는 숫자로 결과를할지 여부를 결정해야합니다.

  2. ==============================

    2.여기에 (MySQL은) 일관성없는 결과를 것 인용 한 예는 다음과 같습니다

    여기에 (MySQL은) 일관성없는 결과를 것 인용 한 예는 다음과 같습니다

    select 1 < 1.0;      // returns 0
    
    select '1' < '1.0';  // returns 1
    

    두 번째 비교 수치는 현재 문자열 정렬을 사용하는 대신 수행되어 있기 때문입니다.

    그건 그냥 비교를 위해 숫자 값에 문자열 리터럴을 변환 할 수있는 데이터베이스에 대한 추가 불필요한 단계가 될 것입니다 및 비교의 의미를 변경할 수 있기 때문에 그것은 인용 번호를 더 나은 아니다.

  3. ==============================

    3.이 답변은 특정 MSSQL 2008 R2에서 마이크로 소프트 SQL 서버를위한 것입니다.

    이 답변은 특정 MSSQL 2008 R2에서 마이크로 소프트 SQL 서버를위한 것입니다.

    필기 SQL에서 나는 숫자를 인용하지 않을 것 (삽입 된 문자열이 단지 숫자 일어나는 VARCHAR 컬럼에 값을 삽입하지 않는 한). SQL을 생성 할 때하지만 가끔은 프로그래밍 그냥 인용 모든 삶 간단하게 할 수 있습니다. (이것은 데이터베이스 유지 관리 스크립트 또는 테이블에 작업이 사전에 열 유형을 모르고 라이브러리 루틴입니다.)

    내가 이렇게하면 성능 저하를 부과 여부를 궁금해. 내 SQL 문에 인용 된 값을 사용했다면, 서버는 문자열로 구문 분석하고 정수로 변환해야합니다. 그러나, SQL 구문 분석하는 것은 어쨌든 문자열을 정수로 변환 포함한다. 그리고 쿼리 구문 분석 시간은 일반적으로 전체의 극히 일부에 지나지 않습니다.

    나는 몇 가지 테스트 문처럼 보이는 실행

    insert into #t values (123, 123, 123), (123, 123, 123)
    insert into #t values ('123', '123', '123'), ('123', '123', '123')
    

    하지만 #T의 열 큰 숫자로, 값 튜플의 큰 숫자는 한 번에 삽입하고, 각 문은 여러 번 반복했다. 나는 그것을 위해 펄을 사용하는 일이 :

    $dbh = my_database_connection(); # using DBD::Sybase
    $n = 20; # this many value tuples, and also repeated this many times
    $v = "'123'";
    # $v = 123;    # uncomment this to insert without quoting
    
    @cols = 'aa' .. 'zz';
    @ds = map { "[$_] int not null" } @cols;
    @vs = map { $v } @cols;
    $" = ", ";
    $dbh->do("create table #t (@ds)");
    foreach (1 .. $n) {
        $sql = 'insert into #t values ';
        $sql .= "(@vs), " foreach 1 .. $n;
        $sql =~ s/, \z//;
        $dbh->do($sql);
    }
    

    하지만 당신은 하찮게 모든 언어에서 같은 벤치 마크를 쓸 수 있습니다. 나는 인용 된 경우 및 인용 부호로 둘러싸이지 않은이 여러 번 실행 및 속도에 유의 한 차이가 관찰되지. (내 설정에 단일 실행은 십초에 대한했다, 당신은 분명히 빠르게 또는 느리게 만들 $ N을 변경할 수 있습니다.)

    그것에서 중복 인용 문자가있는 경우 물론, 생성 된 SQL이 크다. 그것은 확실히 빨리 할 수는 없지만, 눈에 띄게 느린 것으로 표시되지 않습니다.

    이 결과 감안할 때, 나는 삽입되는 열의 데이터 형식을 알 필요없이, 모든 값 주위에 작은 따옴표를 추가 내 SQL 세대의 코드를 단순화합니다. (코드는 아직 확인 입력 값이 자체가 '문자를 포함하지 않는, 또는 기타 영리 인용하여 SQL 인젝션 방어 할 필요가 없습니다.)

    나는 아직도 사물의 정상적인 과정에서 SQL에 숫자를 인용하지 않는 것이 좋습니다,하지만 당신은 당신이 그것을 할 필요가 찾을 경우, 어떤 해를 입힐 표시되지 않습니다. 마찬가지로, 생성 된 코드에 내가 필요 여부 열 이름 주위에 [] 넣어,하지만 난 필기 SQL에서 불필요한 cruft에 고려.

  4. ==============================

    4.난 당신이 읽고 있습니다 모르겠어요,하지만 숫자를 인용하지 않습니다.

    난 당신이 읽고 있습니다 모르겠어요,하지만 숫자를 인용하지 않습니다.

  5. ==============================

    5.물론, 당신은 통과해야합니다 값이 정말로 숫자인지 확인하기 위해 확인하는 것을 잊지 않는다.

    물론, 당신은 통과해야합니다 값이 정말로 숫자인지 확인하기 위해 확인하는 것을 잊지 않는다.

  6. ==============================

    6.음, 불꽃 점화의 위험, 나는 정중는 숫자 값 주위에 작은 따옴표를 사용하는 것이 결코 괜찮 그 작은 여기를 동의 할 수있다? 때로는 숫자 값 주위에 작은 따옴표를 사용하는 의미가 나에게 보인다. COL1 INT는 열이 다음의 경우 (예를 들어 VBScript를 사용)

    음, 불꽃 점화의 위험, 나는 정중는 숫자 값 주위에 작은 따옴표를 사용하는 것이 결코 괜찮 그 작은 여기를 동의 할 수있다? 때로는 숫자 값 주위에 작은 따옴표를 사용하는 의미가 나에게 보인다. COL1 INT는 열이 다음의 경우 (예를 들어 VBScript를 사용)

    sql = "INSERT " & foo & " INTO col1 WHERE ID = 1"
    

    sql = "INSERT '" & foo & "' INTO col1 WHERE ID = 1"
    

    BOTH, SQL이 실행될 때, 제대로 foo는의 정수 값을 삽입합니다. 그러나 당신이 foo는 초기화되지 않은 경우 0을 삽입하려면? 이 같은 인용 숫자 식을 사용하여 오류 및 핸들 널 사례를 방지 할 수 있습니다. 여부는 당신은 확실히 사실,이 좋은 방법이라고 생각합니다.

  7. ==============================

    7.어 ... 아니 당신은 안하지?

    어 ... 아니 당신은 안하지?

    나는 당신이 '에 둘러싸 인용 뜻 가정

  8. from https://stackoverflow.com/questions/2078942/should-i-quote-numbers-in-sql by cc-by-sa and MIT license