[SQL] 나는 SQL의 숫자를 인용해야 하는가?
SQL나는 SQL의 숫자를 인용해야 하는가?
나는 SQL 쿼리를 수행 할 때 물건을 인용 대한 책을 읽은 기억과 당신이 뭔가를 인용 할 때 즉, 문자열이된다. 나는 또한 그 번호를 인용해서는 안 읽습니다. 지금, 나는 그 인용을 찾을 수 없습니다와 나는 숫자를 인용해야하는지 내 기억을 상기 할 필요가있다.
해결법
-
==============================
1.당신은 숫자로 처리하려는 경우 숫자를 인용해서는 안된다.
당신은 숫자로 처리하려는 경우 숫자를 인용해서는 안된다.
당신은 그것을 문자열 수 있음을 기억하여 맞아요.
SELECT 10 AS x
완벽하게 합법적이고 (대부분의 데이터베이스 엔진에서) 데이터 형 INT의 열 반환 (또는 변화를.)
이 작업을 수행하는 경우 :
SELECT '10' AS x
대신 당신은 텍스트 데이터 형식을 얻을 수 있습니다. 이 역시 경우에 적합 할 수 있지만 당신은 텍스트로 또는 숫자로 결과를할지 여부를 결정해야합니다.
-
==============================
2.여기에 (MySQL은) 일관성없는 결과를 것 인용 한 예는 다음과 같습니다
여기에 (MySQL은) 일관성없는 결과를 것 인용 한 예는 다음과 같습니다
select 1 < 1.0; // returns 0 select '1' < '1.0'; // returns 1
두 번째 비교 수치는 현재 문자열 정렬을 사용하는 대신 수행되어 있기 때문입니다.
그건 그냥 비교를 위해 숫자 값에 문자열 리터럴을 변환 할 수있는 데이터베이스에 대한 추가 불필요한 단계가 될 것입니다 및 비교의 의미를 변경할 수 있기 때문에 그것은 인용 번호를 더 나은 아니다.
-
==============================
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.난 당신이 읽고 있습니다 모르겠어요,하지만 숫자를 인용하지 않습니다.
난 당신이 읽고 있습니다 모르겠어요,하지만 숫자를 인용하지 않습니다.
-
==============================
5.물론, 당신은 통과해야합니다 값이 정말로 숫자인지 확인하기 위해 확인하는 것을 잊지 않는다.
물론, 당신은 통과해야합니다 값이 정말로 숫자인지 확인하기 위해 확인하는 것을 잊지 않는다.
-
==============================
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.어 ... 아니 당신은 안하지?
어 ... 아니 당신은 안하지?
나는 당신이 '에 둘러싸 인용 뜻 가정
from https://stackoverflow.com/questions/2078942/should-i-quote-numbers-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 봄 부팅 - 저장소 필드를 찾을 수 없습니다 '의 EntityManagerFactory'라는 이름의 빈을 요구 (0) | 2020.07.12 |
---|---|
[SQL] NVARCHAR 선언에서 생략 크기의 효과는 무엇인가 (0) | 2020.07.12 |
[SQL] 참조 테이블에 기본 또는 후보 키가 없습니다 (0) | 2020.07.12 |
[SQL] 고유 키와 같은 메이크업 텍스트 열 (0) | 2020.07.12 |
[SQL] PHP에서 페이지 매김 (0) | 2020.07.12 |