programing

오라클이 대소문자를 구분하는 이유

minimums 2023. 3. 9. 21:56
반응형

오라클이 대소문자를 구분하는 이유

Oracle이 대소문자를 구분하고 SQL Server 및 MySQL과 같은 다른 제품이 기본적으로 대소문자를 구분하지 않는 이유가 있습니까?

대소문자를 구분하거나 구분하는 방법이 있다는 것은 알지만 Oracle이 다른 데이터베이스와 다르다는 점이 이상할 뿐입니다.

또한 대소문자를 구분하는 이유를 이해하려고 합니다."Table"과 "TaBlE"가 동등하다고 간주되고 동등하지 않다고 간주될 수 있는 부분은 알 수 있지만, 실제로 대소문자를 구분하여 실제로 차이를 만드는 예가 있습니까?

저는 데이터베이스를 처음 접해서 현재 수업을 듣고 있습니다.

기본적으로 Oracle 식별자(테이블 이름, 열 이름 등)는 대소문자를 구분하지 않습니다.따옴표를 사용하여 대소문자를 구분할 수 있습니다(예:SELECT * FROM "My_Table" WHERE "my_field" = 1) SQL 키워드 (SELECT,WHERE,JOIN, 등)는 항상 대소문자를 구분합니다.

한편 문자열 비교에서는 대소문자가 구분됩니다(예:WHERE field='STRING'열과 일치합니다.'STRING'디폴트로는) 입니다.대소문자를 구분하지 않도록 설정할 수 있습니다.NLS_COMP그리고.NLS_SORT적절한 값(예:LINGUISTIC그리고.BINARY_CI(각각).

주의: 데이터 사전 보기를 조회할 때(예:dba_tables따옴표를 붙이지 않고 작성한 경우 이름은 대문자로 표시됩니다.여기에서는 두 번째 단락에서 설명한 문자열 비교 규칙이 적용됩니다.

일부 데이터베이스(Oracle, IBM DB2, Postgre)SQL 등)에서는 기본적으로 대소문자를 구분하는 문자열 비교가 수행되며 다른 문자열은 대소문자를 구분하지 않습니다(SQL Server, MySQL, SQLite).이것은 표준 사양이 아니므로 db 설정이 무엇인지 알아두시기 바랍니다.

Oracle에서는 식별자 주위에 따옴표를 사용하지 않는 한 필드 및 테이블 이름을 대소문자를 구분하지 않고 처리합니다.이름 주위에 따옴표 없이 테이블을 작성하면(예: CREATE MyTable...) 결과 테이블 이름이 대문자(즉, MYTABLE)로 변환되어 대소문자를 구분하지 않는 방식으로 처리됩니다.MYTABLE의 SELECT *, MyTable의 SELECT *, myTabLle의 SELECT *는 모두 MYTABLE과 일치합니다(테이블 이름 주위에 따옴표가 없습니다).이 문제에 대해 자세히 설명하고 데이터베이스를 비교하는 이 문제에 대한 좋은 기사를 소개합니다.

SQL Server의 경우도 대소문자를 구분하여 대조합니다.기본 조합은 대소문자를 구분하지 않지만 대소문자를 구분하도록 변경될 수 있습니다.ASCII 이외의 문자를 사용하는 글로벌응용 프로그램에 UTF가 필요한 경우 기본 Oracle 데이터베이스가 서유럽 문자 세트를 사용하는 이유도 이와 유사합니다.그냥 벤더 취향인 것 같아요.

굳이 추측하자면, 이력/후방 호환성의 이유라고 할 수 있습니다.
Oracle은 1977년에 처음 출시되었으며, 당시 기술로는 대소문자를 구분하지 않는 검색을 위해 추가 작업을 수행하는 데 많은 비용이 소요되었기 때문에 정확한 일치를 선택했을 뿐입니다.

대소문자를 구분하는 것이 중요한 애플리케이션도 있고 그렇지 않은 애플리케이션도 있습니다.어느 DBMS를 사용하든 비즈니스 요건에 따라 대소문자를 구분해야 하는지 여부를 결정해야 합니다.디폴트(채무불이행)에 대해서는 크게 걱정하지 않겠습니다.

언급URL : https://stackoverflow.com/questions/7425153/reason-why-oracle-is-case-sensitive

반응형