[SQL] SQL 서버 체크 대소 문자 구분?
SQLSQL 서버 체크 대소 문자 구분?
어떻게 SQL Server의 데이터베이스가 대소 문자를 구분 있는지 확인할 수 있습니까? 나는 이전에 쿼리를 실행되었습니다
SELECT CASE WHEN 'A' = 'a' THEN 'NOT CASE SENSITIVE' ELSE 'CASE SENSITIVE' END
이 사실은 내가 과거에 발행 주신 그러나 나는 다른 방법을 찾고 있습니다.
편집 - 조금 더 정보 : 기존 제품은 많은 미리 작성된 저장 프로 시저가 있습니다. 저장 프로 시저 @Test에서! = @TEST는 서버 자체의 감도에 따라 달라집니다. 그래서 내가 무엇을 찾고있어 감도에 대한 서버를 확인하는 가장 좋은 방법입니다.
해결법
-
==============================
1.정렬은 다양한 수준에서 설정할 수 있습니다 :
정렬은 다양한 수준에서 설정할 수 있습니다 :
그래서 당신은 대소 문자를 구분 데이터베이스에서 대소 문자 구분 열을 가질 수 있습니다. 아직 비즈니스 사례는 데이터의 단일 컬럼의 대소 문자 구분을 위해 할 수있는 상황 건너하지 않은,하지만 난이있을 수도있을 것 같군요.
서버 데이터 정렬을 확인
SELECT SERVERPROPERTY('COLLATION')
확인 데이터베이스 데이터 정렬
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
확인 열 정렬
select table_name, column_name, collation_name from INFORMATION_SCHEMA.COLUMNS where table_name = @table_name
-
==============================
2.기본 정렬 옵션으로 SQL 서버를 설치 한 경우, 다음 쿼리는 동일한 결과를 반환 사실을 발견했습니다 :
기본 정렬 옵션으로 SQL 서버를 설치 한 경우, 다음 쿼리는 동일한 결과를 반환 사실을 발견했습니다 :
CREATE TABLE mytable ( mycolumn VARCHAR(10) ) GO SET NOCOUNT ON INSERT mytable VALUES('Case') GO SELECT mycolumn FROM mytable WHERE mycolumn='Case' SELECT mycolumn FROM mytable WHERE mycolumn='caSE' SELECT mycolumn FROM mytable WHERE mycolumn='case'
당신은 열 수준에서 데이터 정렬을 강제로 쿼리를 변경할 수 있습니다 :
SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'caSE' SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'case' SELECT myColumn FROM myTable WHERE myColumn COLLATE Latin1_General_CS_AS = 'Case' -- if myColumn has an index, you will likely benefit by adding -- AND myColumn = 'case' SELECT DATABASEPROPERTYEX('<database name>', 'Collation')
응용 프로그램과 SQL 쿼리에 영향을 줄 수있는이 설정을 변경, 나는 먼저이 테스트를 분리합니다. SQL 서버 2000에서, 당신은 쉽게 민감한 경우가 강요, 특정 컬럼의 정렬 순서를 변경하는 ALTER TABLE 문을 실행할 수 있습니다. 첫째, 당신이 다시 변경해야하는 것을 결정하기 위해 다음과 같은 쿼리를 실행합니다 :
EXEC sp_help 'mytable'
두 번째 레코드는 기본 시나리오에서 다음과 같은 정보를 포함해야합니다 :
COLUMN_NAME 정렬
mycolumn의 SQL_Latin1_General_CP1_CI_AS 데이터
무엇이든 '정렬'열 반환, 당신은 지금 당신이 대소 문자 구분을 강제로 다음과 같이 변경을 한 후에 다시 변경하기 위해 필요한 게 뭔지 알아요 :
ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(10) COLLATE Latin1_General_CS_AS GO SELECT mycolumn FROM mytable WHERE mycolumn='Case' SELECT mycolumn FROM mytable WHERE mycolumn='caSE' SELECT mycolumn FROM mytable WHERE mycolumn='case'
이 나사 일까지, 당신은 단순히 새로운 ALTER TABLE 문을 실행하여, 다시 변경할 수 있습니다 (이전에 발견 한 내 COLLATE 식별자를 교체해야합니다) :
ALTER TABLE mytable ALTER COLUMN mycolumn VARCHAR(10) COLLATE SQL_Latin1_General_CP1_CI_AS
당신은 SQL 서버 7.0와 함께 붙어있는 경우, 당신은 좀 더 성능 저하의 (당신이 첫 번째 경기에 대한 결과를 얻어야한다) 수 있습니다이 해결 방법을 시도 할 수 있습니다 :
SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('Case' AS VARBINARY(10)) SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('caSE' AS VARBINARY(10)) SELECT mycolumn FROM mytable WHERE mycolumn = 'case' AND CAST(mycolumn AS VARBINARY(10)) = CAST('case' AS VARBINARY(10)) -- if myColumn has an index, you will likely benefit by adding -- AND myColumn = 'case'
-
==============================
3.SQL 서버 COLLATION가 대소 문자를 판단한다.
SQL 서버 COLLATION가 대소 문자를 판단한다.
COLLATION은 다양한 수준에서 설정할 수 있습니다.
여기 MSDN 기준이다.
주권의 더 많은 답변에서 언급 한 각 수준에서 데이터 정렬을 확인할 수 있습니다.
서버 데이터 정렬을 확인
SELECT SERVERPROPERTY('COLLATION')
확인 데이터베이스 데이터 정렬
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
확인 열 정렬
select table_name, column_name, collation_name from INFORMATION_SCHEMA.COLUMNS where table_name = @table_name
체크 식 정렬
발현 수준 데이터 정렬의 경우에는 표현에서 볼 필요가있다. :)
그것은 예를 들어 다음과 같이 표현의 끝에서 일반적 일 것이다.
SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI;
정렬 설명
각 정렬 값의 설명을 얻기 위해 이것을 시도.
SELECT * FROM fn_helpcollations()
그리고 당신은 다음과 같이 표시됩니다.
당신은 항상 필터에 WHERE 절을 넣어 만 COLLATION에 대한 설명을 볼 수 있습니다.
현재 정렬의 목록을 찾을 수 있습니다.
-
==============================
4.당신은 정렬에 관심이 있습니다. 이 조각을 기반으로 뭔가를 만들 수 :
당신은 정렬에 관심이 있습니다. 이 조각을 기반으로 뭔가를 만들 수 :
SELECT DATABASEPROPERTYEX('master', 'Collation');
최신 정보 당신의 편집을 기반으로 - @Test와 @TEST 이제까지 두 개의 서로 다른 변수를 참조 할 경우, SQL 서버 아니다. 같은 변수가없는 경우에는 문제를 볼 자체에 동일 경우 그 변수가 NULL 인 경우, NULL = NULL 때문에 반환`거짓을 확인합니다.
-
==============================
5.이미 만들어진 테이블 작업에 가장 좋은 방법은, 그입니다 SQL Server 쿼리 편집기로 이동
이미 만들어진 테이블 작업에 가장 좋은 방법은, 그입니다 SQL Server 쿼리 편집기로 이동
입력 : sp_help는
이것은 테이블의 구조를 보여 COLLATE 열에서 원하는 필드에 대한 세부 정보를 볼 수 있습니다.
다음과 같은 쿼리를 입력 :
SELECT myColumn FROM myTable WHERE myColumn COLLATE SQL_Latin1_General_CP1_CI_AS = 'Case'
다른 문자 스키마
, 그래서 더 그 칼럼에 사용 된 정확한 스키마를 찾을 수 있습니다. -
==============================
6.당신은 당신의 정보를 데이터베이스를 반환하는 쿼리 아래에 사용할 수 있습니다 소문자를 구분 여부 나 (널 결과) 이진 정렬에 있습니다 :
당신은 당신의 정보를 데이터베이스를 반환하는 쿼리 아래에 사용할 수 있습니다 소문자를 구분 여부 나 (널 결과) 이진 정렬에 있습니다 :
;WITH collations AS ( SELECT name, CASE WHEN description like '%case-insensitive%' THEN 0 WHEN description like '%case-sensitive%' THEN 1 END isCaseSensitive FROM sys.fn_helpcollations() ) SELECT * FROM collations WHERE name = CONVERT(varchar, DATABASEPROPERTYEX('yourDatabaseName','collation'));
자세한 내용은이 MSDN 정보를 읽어).
-
==============================
7.SQL 서버는 대소 문자를 구분하지 않습니다. SomeTable FROM SELECT *는 soMetaBLe에서 선택 *와 동일하다.
SQL 서버는 대소 문자를 구분하지 않습니다. SomeTable FROM SELECT *는 soMetaBLe에서 선택 *와 동일하다.
from https://stackoverflow.com/questions/1411161/sql-server-check-case-sensitivity by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 열 이름을 탈출 SQL 표준? (0) | 2020.03.30 |
---|---|
[SQL] 외래 키 테이블 열은 NULL이 될 수 있습니까? (0) | 2020.03.30 |
[SQL] SQL에 의해 고유의 레코드를 선택하는 방법 (0) | 2020.03.30 |
[SQL] SQL Server 2008의 "WHERE"절에서 "CASE"문 (0) | 2020.03.30 |
[SQL] 어떻게 GROUP BY 작동합니까? (0) | 2020.03.30 |