복붙노트

[SQL] SQL 서버 체크 대소 문자 구분?

SQL

SQL 서버 체크 대소 문자 구분?

어떻게 SQL Server의 데이터베이스가 대소 문자를 구분 있는지 확인할 수 있습니까? 나는 이전에 쿼리를 실행되었습니다

SELECT CASE WHEN 'A' = 'a' THEN 'NOT CASE SENSITIVE' ELSE 'CASE SENSITIVE' END

이 사실은 내가 과거에 발행 주신 그러나 나는 다른 방법을 찾고 있습니다.

편집 - 조금 더 정보 : 기존 제품은 많은 미리 작성된 저장 프로 시저가 있습니다. 저장 프로 시저 @Test에서! = @TEST는 서버 자체의 감도에 따라 달라집니다. 그래서 내가 무엇을 찾고있어 감도에 대한 서버를 확인하는 가장 좋은 방법입니다.

해결법

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

    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. ==============================

    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. ==============================

    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. ==============================

    4.당신은 정렬에 관심이 있습니다. 이 조각을 기반으로 뭔가를 만들 수 :

    당신은 정렬에 관심이 있습니다. 이 조각을 기반으로 뭔가를 만들 수 :

    SELECT DATABASEPROPERTYEX('master', 'Collation');
    

    최신 정보 당신의 편집을 기반으로 - @Test와 @TEST 이제까지 두 개의 서로 다른 변수를 참조 할 경우, SQL 서버 아니다. 같은 변수가없는 경우에는 문제를 볼 자체에 동일 경우 그 변수가 NULL 인 경우, NULL = NULL 때문에 반환`거짓을 확인합니다.

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

    5.이미 만들어진 테이블 작업에 가장 좋은 방법은, 그입니다 SQL Server 쿼리 편집기로 이동

    이미 만들어진 테이블 작업에 가장 좋은 방법은, 그입니다 SQL Server 쿼리 편집기로 이동

    입력 : sp_help는

    이것은 테이블의 구조를 보여 COLLATE 열에서 원하는 필드에 대한 세부 정보를 볼 수 있습니다.

    다음과 같은 쿼리를 입력 :

    SELECT myColumn FROM myTable  
    WHERE myColumn COLLATE SQL_Latin1_General_CP1_CI_AS = 'Case'
    

    다른 문자 스키마 , 그래서 더 그 칼럼에 사용 된 정확한 스키마를 찾을 수 있습니다.

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

    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. ==============================

    7.SQL 서버는 대소 문자를 구분하지 않습니다. SomeTable FROM SELECT *는 soMetaBLe에서 선택 *와 동일하다.

    SQL 서버는 대소 문자를 구분하지 않습니다. SomeTable FROM SELECT *는 soMetaBLe에서 선택 *와 동일하다.

  8. from https://stackoverflow.com/questions/1411161/sql-server-check-case-sensitivity by cc-by-sa and MIT license