Firebird 2.5의 연결 문자열 문자셋 관련 수정 사항
작성자: Adriano dos Santos Fernandes [email protected]
날짜: 2008-12-15
FB 2.5 이전에는 연결 문자열에 사용된 파일 이름이 항상 변환 없이 클라이언트에서 서버로 전달되었습니다. 서버에서도 해당 파일 이름은 변환 없이 OS API 함수에 사용되었습니다. 이로 인해 비ASCII 문자를 사용하는 파일 이름이 클라이언트와 서버가 다른 OS이거나 동일한 OS에서 다른 코드페이지를 사용하는 경우 제대로 상호 운용되지 않는 상황이 발생했습니다.
이 문제는 FB 2.5에서 다음과 같은 방식으로 해결되었습니다:
파일 이름은 기본적으로 OS 코드페이지에 있는 것으로 간주됩니다.
isc_dpb_utf8.filename이라는 새로운 DPB가 도입되었습니다. 이는 위 규칙을 변경하여 FB가 전달된 파일 이름을 UTF-8로 간주하도록 합니다.
v2.5(이상) 클라이언트가 v2.5보다 오래된 원격 서버와 통신하고 isc_dpb_utf8.filename이 사용된 경우, 클라이언트는 파일 이름을 UTF-8에서 클라이언트 코드페이지로 변환하여 해당 파일 이름을 서버에 전달합니다. 클라이언트는 isc_dpb_utf8.filename DPB를 제거합니다.
이렇게 하면 클라이언트와 서버 OS에서 동일한 코드페이지를 사용하는 경우 이전 버전과의 호환성이 보장됩니다.
v2.5(이상) 클라이언트가 v2.5(이상) 서버와 통신하고 isc_dpb_utf8.filename이 사용되지 않은 경우, 클라이언트는 파일 이름을 OS 코드페이지에서 UTF-8로 변환하고 isc_dpb_utf8.filename DPB를 삽입합니다. isc_dpb_utf8.filename이 사용된 경우 클라이언트는 원래 파일 이름을 DPB에 포함하여 서버에 전달합니다. 따라서 클라이언트는 항상 UTF-8 파일 이름과 isc_dpb_utf8.filename DPB를 서버에 전달합니다.
서버에서 수신된 파일 이름은 위와 동일한 규칙이 적용됩니다. 단, v2.5 클라이언트는 파일 이름을 자동으로 변환하고 DPB를 삽입할 수 있습니다. v2.5보다 오래된 클라이언트는 그렇게 하지 않으므로 수신된 파일 이름은 서버 코드페이지에 있는 것으로 간주됩니다. 클라이언트와 서버 코드페이지가 동일한 경우 이전 버전과의 호환성이 다시 보장됩니다.
OS 코드페이지와 UTF-8이 파일 이름에 항상 더 나은 선택은 아닐 수 있습니다. 예를 들어, ISQL(또는 다른 도구) 스크립트가 있고 해당 스크립트가 다른 연결 문자셋을 사용하는 경우를 생각해 보십시오. 여러 문자 집합(코드페이지)을 사용하여 스크립트(또는 파일)를 올바르게 편집할 수 없습니다. 이제 연결 문자열 파일 이름에서 모든 유니코드 문자를 ASCII 문자로 인코딩할 수 있습니다. 이는 # 기호를 사용하여 수행됩니다. 이는 유니코드 코드 포인트 번호(16진수 형식, U+XXXX 표기법과 유사)의 접두사입니다. #XXXX 형식으로 작성해야 하며 X는 0-9, a-f, A-F입니다.
리터럴 #을 사용하려면 ## 또는 #0023(해당 코드 포인트 번호)을 사용할 수 있습니다.
이 문자는 클라이언트가 v2.5보다 오래된 경우에도 서버에서 이 새로운 의미로 해석됩니다.
변환에 사용되는 OS 코드페이지는 다음과 같습니다:
- Windows: Windows ANSI 코드 페이지
- 기타: UTF-8
2.5 Beta 2용 업데이트: 2008-07-11
이 규칙은 이제 문자열 DPB 항목에도 적용됩니다.