:meta-keywords: cubrid strings, charset, codeset, collation, cubrid locale :meta-description: Globalization includes internationalization and localization. Internationalization can be applied to various languages and regions. Localization fits the language and culture in a specific area as appending the language-specific components. CUBRID supports multilingual collations including Europe and Asia to facilitate the localization. .. _globalization-overview: 다êµì–´ 개요 =========== ë¬¸ìž ë°ì´í„° ----------- ì½œë ˆì´ì…˜ì„ ì ìš©í• ìˆ˜ 있는 ë°ì´í„°ì˜ íƒ€ìž…ì€ VARCHAR, CHAR, ENUM 타입ì´ë‹¤. 문ìžì…‹(charset, codeset)ì€ ì–´ë–¤ íƒ€ìž…ì— ëŒ€í•´ 문ìžê°€ ì €ìž¥ë˜ëŠ” ë°©ì‹ ë˜ëŠ” ì¼ë ¨ì˜ ë°”ì´íŠ¸ê°€ í•˜ë‚˜ì˜ ë¬¸ìžë¥¼ 구성하는 ë°©ì‹ì„ ì œì–´í•œë‹¤. CUBRID는 UTF-8, ISO-8859-1, EUC-KR 문ìžì…‹ì„ ì§€ì›í•˜ë©°, UTF-8ì— ëŒ€í•´ 코드í¬ì¸íЏ 10FFFF(4 ë°”ì´íŠ¸ê¹Œì§€ ì¸ì½”딩ë¨)까지만 ì§€ì›í•œë‹¤. 예를 들어, ë¬¸ìž "Ç"는 코드셋 ISO-8859-1ì—서 1 ë°”ì´íЏ(C7)으로 ì¸ì½”딩ë˜ì§€ë§Œ, UTF-8ì—서는 2 ë°”ì´íЏ(C3 88)로 ì¸ì½”딩ëœë‹¤. 반면, EUC-KRì—서 ì´ ë¬¸ìžëŠ” ì‚¬ìš©í• ìˆ˜ 없다. ì½œë ˆì´ì…˜ì€ 문ìžë¥¼ 비êµí•˜ëŠ” ë°©ë²•ì„ ê²°ì •í•œë‹¤. 사용ìžëŠ” í”히 ì½œë ˆì´ì…˜ì„ 통해 대소문ìžë¥¼ 구분하지 않거나 구분한다. 예를 들어 "ABC"와 "abc"는 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 무시(case insensitive) ì½œë ˆì´ì…˜ì—서는 ë™ì¼í•œ 반면, ëŒ€ì†Œë¬¸ìž êµ¬ë¶„(case sensitive) ì½œë ˆì´ì…˜ì—서는 ë™ì¼í•˜ì§€ 않다. ë˜í•œ ì½œë ˆì´ì…˜ì— ë”°ë¼ ë¹„êµ ê²°ê³¼ê°€ "ABC" > "abc"ê°€ ë˜ê±°ë‚˜ "ABC" < "abc"ê°€ ë 수 있다. ì½œë ˆì´ì…˜ì€ ëŒ€ì†Œë¬¸ìž ë¹„êµ ì´ìƒì˜ ê²ƒì„ ì˜ë¯¸í•œë‹¤. ì½œë ˆì´ì…˜ì€ ë‘ ë¬¸ìžì—´ ê°„ì— ê´€ê³„ë¥¼ ê²°ì •í•˜ì—¬ LIKE와 ê°™ì€ ë¬¸ìžì—´ 매ì¹ì— 사용ë˜ê±°ë‚˜ ì¸ë±ìФ 스캔ì—서 ì˜ì—ì„ ê³„ì‚°í•˜ëŠ”ë° ì‚¬ìš©ëœë‹¤. CUBRIDì—서 ì½œë ˆì´ì…˜ì€ 문ìžì…‹ì„ í¬í•¨í•œë‹¤. 예를 들어, "utf8_en_ci"ê³¼ "iso88591_en_ci"ì€ ëŒ€ì†Œë¬¸ìžë¥¼ 구분하지 않는 비êµì´ì§€ë§Œ 다른 문ìžì…‹ì—서 ë™ìž‘한다. ASCII 범위ì—서 ë¹„êµ ê²°ê³¼ëŠ” 비슷하지만 UTF-8 ì¸ì½”ë”©ì€ ê°€ë³€ì ì¸ ë°”ì´íЏ ìˆ˜ì— ë”°ë¼ ë™ìž‘해야 하기 ë•Œë¬¸ì— "utf8_en_ci" ì½œë ˆì´ì…˜ì—서 ë¹„êµ ìˆ˜í–‰ ì†ë„ê°€ ë” ëŠë¦¬ë‹¤. * "'a' COLLATE iso88591_en_ci"는 "_iso88591'a' COLLATE iso88591_en_ci"를 나타낸다. * "'a' COLLATE utf8_en_ci"는 "_utf8'a' COLLATE utf8_en_ci"를 나타낸다. ëª¨ë“ ë¬¸ìž ë°ì´í„° íƒ€ìž…ì€ ìžë¦¿ìˆ˜(precision)를 ì§€ì›í•œë‹¤. ê³ ì • ê¸¸ì´ ë¬¸ìž(CHAR)는 특별히 ë‹¤ë£¨ì–´ì ¸ì•¼ 한다. CHAR íƒ€ìž…ì˜ ê°’ì€ ìžë¦¿ìˆ˜ë¥¼ 채워서 ì €ìž¥ëœë‹¤. 예를 들어 "abc"를 CHAR(5) ì¹¼ëŸ¼ì— ì €ìž¥í•˜ë©´, "abc "(2 ê°œì˜ ê³µë°± 문ìžê°€ 패딩ë¨)를 ì €ìž¥í•˜ê²Œ ëœë‹¤. 공백 문ìž(ASCII 32, Unicode 0020)는 대부분 문ìžì—서 사용하는 패딩 문ìžì´ë‹¤. 하지만 EUC-KR 문ìžì…‹ì—서 패딩 문ìžëŠ” ë‘ ê°œ ë°”ì´íЏ(A1 A1)로 ì €ìž¥ëœ í•˜ë‚˜ì˜ ë¬¸ìžë¡œ 구성ëœë‹¤. ê´€ë ¨ 용어 --------- .. ", 통화"는 ì œê±°í–ˆë‹¤. MONETARYê°€ deprecateë˜ì—ˆê¸° 때문. * **문ìžì…‹(character set)**: 기호를 ì¸ì½”딩(ì–´ë–¤ ê¸°í˜¸ì— íŠ¹ì • 번호를 부여)한 ì§‘í•© * **ì½œë ˆì´ì…˜(collation)**: 문ìžì…‹ì—서 문ìžë¥¼ 비êµí•˜ê¸° 위한, ë°ì´í„° ì •ë ¬ì„ ìœ„í•œ ê·œì¹™ì˜ ì§‘í•© * **로캘(locale)**: 사용ìžì˜ 언어 ë° êµê°€ì— ë”°ë¼ ìˆ«ìž í˜•ì‹, 캘린ë”(ì›”ì˜ ì´ë¦„, ìš”ì¼ì˜ ì´ë¦„), ë‚ ì§œ/시간 형ì‹, ì½œë ˆì´ì…˜ ë“±ì„ ì •ì˜í•˜ëŠ” ì¸ìžë“¤ì˜ ì§‘í•©. ë¡œìº˜ì€ ì–¸ì–´ì— ëŒ€í•œ ì§€ì—í™”(localization)를 ì •ì˜í•œë‹¤. ë¡œìº˜ì˜ ë¬¸ìžì…‹ì€ ì›”ì˜ ì´ë¦„ ë° ë‹¤ë¥¸ ë°ì´í„°ê°€ 어떻게 ì¸ì½”딩ë˜ëŠ”ì§€ë¥¼ 나타낸다. ë¡œìº˜ì€ ìµœì†Œí•œ í•˜ë‚˜ì˜ ì–¸ì–´ ì‹ë³„ìžì™€ ì˜ì— ì‹ë³„ìžë¡œ 구성ë˜ì–´ 있으며 language[_territory][.codeset]으로 표현한다. (예를 들어 UTF-8 ì¸ì½”ë”©ì„ ì“°ëŠ” ì˜¤ìŠ¤íŠ¸ë ˆì¼ë¦¬ì•„ ì˜ì–´ëŠ” en_AU.utf8로 표기한다.) * **ìœ ë‹ˆì½”ë“œ ì •ê·œí™”(Unicode normalization)**: ëª¨ì–‘ì´ ê°™ì€ ì—¬ëŸ¬ 문ìžë“¤ì´ ìžˆì„ ê²½ìš° ê¸°ì¤€ì— ë”°ë¼ ì´ë¥¼ 하나로 통합하는 것. CUBRID는 ìž…ë ¥ 시ì—는 NFC(Normalization Form C) 형ì‹(ë¶„í•´ëœ ì½”ë“œí¬ì¸íЏì—서 ê²°í•©ëœ ì½”ë“œí¬ì¸íŠ¸ë¡œ 변환)ì„ ì‚¬ìš©í•˜ê³ , ì¶œë ¥ 시ì—는 NFD(Normalization Form D) 형ì‹(ê²°í•©ëœ ì½”ë“œí¬ì¸íЏì—서 ë¶„í•´ëœ ì½”ë“œí¬ì¸íŠ¸ë¡œ 변환)ì„ ì‚¬ìš©í•œë‹¤. 하지만, CUBRID는 예외ì 으로 규범ì 등가(canonical equivalence) ê·œì¹™ì„ ì 용하지 않는다. 예를 들어, ì¼ë°˜ì ì¸ NFC ê·œì¹™ì— ë”°ë¥´ë©´ 규범ì 등가 ê·œì¹™ì„ ì 용하여 코드í¬ì¸íЏ 212A(캘빈 기호 K)는 코드í¬ì¸íЏ 4B(ASCII 코드 ëŒ€ë¬¸ìž K)로 변환ëœë‹¤. CUBRID는 규범ì 등가 ê·œì¹™ì— ì˜í•œ ë³€í™˜ì„ ìˆ˜í–‰í•˜ì§€ 않ë„ë¡ í•˜ì—¬ ì •ê·œí™” ì•Œê³ ë¦¬ì¦˜ì„ ë” ê°„ë‹¨í•˜ê³ ë¹ ë¥´ê²Œ í•˜ì˜€ê³ , ë”°ë¼ì„œ ì—ë³€í™˜ë„ ìˆ˜í–‰í•˜ì§€ 않는다. * **규범ì 등가(canonical equivalence)**: 시ê°ì 으로 êµ¬ë³„ì´ ë¶ˆê°€ëŠ¥í•˜ê³ í…스트 비êµìƒ ì •í™•ížˆ ë™ì¼í•œ ì˜ë¯¸ë¥¼ 가지는 문ìž. 한 예로 'A'ì— ì˜¹ìŠ¤íŠ¸ë¡¬(Angstrom) 기호가 있는 'â„«'ê°€ 있는ë°, 'â„«'(ìœ ë‹ˆì½”ë“œ U+212B)와 ë¼í‹´ì–´ 'A'(ìœ ë‹ˆì½”ë“œ U+00C5)는 ëª¨ì–‘ì´ ê°™ê³ ì½”ë“œí¬ì¸íŠ¸ê°€ 다르지만 ë¶„í•´ëœ ê²°ê³¼ëŠ” 'A'와 U+030A로 같으므로 규범ì 등가ì´ë‹¤. * **호환성 등가(compatibility equivalence)**: ë™ì¼í•œ 문ìžë‚˜ ë¬¸ìž ì‹œí€€ìŠ¤ì˜ ëŒ€ì²´ 표현 문ìž. 예로는 ìˆ«ìž '2'(ìœ ë‹ˆì½”ë“œ U+0032)와 위 ì²¨ìž '²'(ìœ ë‹ˆì½”ë“œ U+00B2)ê°€ 있는ë°, '²' 는 ìˆ«ìž '2'ì˜ ë‹¤ë¥¸ 형태ì´ê¸´ 하지만 시ê°ì 으로 구별ë˜ê³ ì˜ë¯¸ë„ 다르기 ë•Œë¬¸ì— ê·œë²”ì ë“±ê°€ì— í•´ë‹¹ë˜ì§€ 않는다. '2²'를 NFC로 ì •ê·œí™”í•˜ë©´ 규범ì 등가를 사용하기 ë•Œë¬¸ì— '2²'ê°€ ìœ ì§€ë˜ì§€ë§Œ, NFKC ë°©ì‹ì—서는 '²'ê°€ 호환성 ë“±ê°€ì¸ '2'로 ë¶„í•´ëœ í›„ ê²°í•©ë˜ì–´ '22'로 바뀔 수 있다. CUBRIDì˜ ìœ ë‹ˆì½”ë“œ ì •ê·œí™”ì—서는 호환성 등가 ê·œì¹™ë„ ì 용하지 않는다. ìœ ë‹ˆì½”ë“œ ì •ê·œí™”ì— ëŒ€í•œ ì„¤ëª…ì€ :ref:`unicode-normalization` 를 ì°¸ê³ í•˜ë©°, 보다 ìžì„¸í•œ ë‚´ìš©ì€ http://unicode.org/reports/tr15/\를 ì°¸ê³ í•œë‹¤. ìœ ë‹ˆì½”ë“œ ì •ê·œí™” ê´€ë ¨ 시스템 파ë¼ë¯¸í„°ì—서 기본으로 ì„¤ì •ë˜ëŠ” ê°’ì€ unicode_input_normalization=noì´ê³ unicode_output_normalization=noì´ë‹¤. ì´ íŒŒë¼ë¯¸í„°ì— 대한 보다 ìžì„¸í•œ ì„¤ëª…ì€ :ref:`stmt-type-parameters` 를 ì°¸ê³ í•œë‹¤. 로캘 ì†ì„± --------- ë¡œìº˜ì€ ë‹¤ìŒê³¼ ê°™ì€ ì†ì„±ë“¤ë¡œ ì •ì˜ëœë‹¤. .. , 통화 형ì‹ì€ ì œê±°í–ˆë‹¤. MONERARY는 deprecatedë˜ì—ˆê¸° 때문. * **문ìžì…‹(코드셋)**: 여러 ë°”ì´íŠ¸ë¥¼ í•˜ë‚˜ì˜ ë¬¸ìžë¡œ í•´ì„하는 ë°©ë²•ì„ ì •ì˜í•œë‹¤. ìœ ë‹ˆì½”ë“œì—서는 여러 ê°œì˜ ë°”ì´íŠ¸ê°€ í•˜ë‚˜ì˜ ì½”ë“œí¬ì¸íЏ(codepoint)를 구성하는 것으로 í•´ì„ëœë‹¤. * **ì½œë ˆì´ì…˜(collation)**: `LDML(UNICODE Locale Data Markup Language) <http://www.unicode.org/reports/tr35/>`_ 파ì¼ì˜ 로캘 ë°ì´í„°ì— 여러 ì½œë ˆì´ì…˜ì„ ì§€ì •í• ìˆ˜ 있는ë°, ì´ ì¤‘ì— ë§ˆì§€ë§‰ìœ¼ë¡œ ëª…ì‹œëœ ê²ƒì´ ê¸°ë³¸(default) ì½œë ˆì´ì…˜ìœ¼ë¡œ 사용ëœë‹¤. * **알파벳(ëŒ€ì†Œë¬¸ìž ê·œì¹™)**: í•˜ë‚˜ì˜ ë¡œìº˜ ë°ì´í„°ëŠ” í…Œì´ë¸” ì´ë¦„, 칼럼 ì´ë¦„ê³¼ ê°™ì€ ì‹ë³„ìžìš©ê³¼ ì‚¬ìš©ìž ë°ì´í„°ìš©ìœ¼ë¡œ 최대 ë‘ ì¢…ë¥˜ì˜ ì•ŒíŒŒë²³ì„ ê°€ì§ˆ 수 있다. * **캘린ë”**: ìš”ì¼ ì´ë¦„, ì›”ì˜ ì´ë¦„, ì˜¤ì „/오후(AM/PM) 표시 * **ìˆ«ìž í‘œê¸°**: ìžë¦¿ìˆ˜ 구분 기호 * **í…스트 변환 ë°ì´í„°**: CSQL 콘솔 변환용. ì„ íƒ ì‚¬í• * **ìœ ë‹ˆì½”ë“œ ì •ê·œí™” ë°ì´í„°**: ëª¨ì–‘ì´ ê°™ì€ ì—¬ëŸ¬ 문ìžë“¤ì´ ìžˆì„ ê²½ìš° ì´ë¥¼ ê¸°ì¤€ì— ë”°ë¼ í•˜ë‚˜ì˜ ê°’ìœ¼ë¡œ 통합하는 ì •ê·œí™”ë¥¼ 수행하여 ë³€í™˜ëœ ë°ì´í„°. ì •ê·œí™” ì´í›„ì—는 ë¡œìº˜ì´ ë‹¬ë¼ë„ ëª¨ì–‘ì´ ê°™ì€ ë¬¸ìžëŠ” ê°™ì€ ì½”ë“œê°’ì„ ê°€ì§€ë©°, ê° ë¡œìº˜ì€ ì´ ì •ê·œí™” ê¸°ëŠ¥ì„ í™œì„±í™” ë˜ëŠ” ë¹„í™œì„±í™”í• ìˆ˜ 있다. .. note:: ì¼ë°˜ì 으로 한 ë¡œìº˜ì€ ë‹¤ì–‘í•œ 문ìžì…‹ì„ ì§€ì›í•˜ì§€ë§Œ, CUBRID ë¡œìº˜ì€ ì˜ì–´ì™€ 한êµì–´ì— 한해서만 ISO와 UTF-8 문ìžì…‹ì„ 둘 다 ì§€ì›í•œë‹¤. ê·¸ ì™¸ì˜ LDML 파ì¼ì„ ì´ìš©í•œ ëª¨ë“ ì‚¬ìš©ìž ì •ì˜ ë¡œìº˜ì€ UTF-8 문ìžì…‹ë§Œ ì§€ì›í•œë‹¤. .. _collation-properties: ì½œë ˆì´ì…˜ ì†ì„± ------------- ì½œë ˆì´ì…˜(collation)ì€ ë¬¸ìžì—´ì˜ ë¹„êµ ë° ì •ë ¬ ê·œì¹™ì˜ ì§‘í•©ìœ¼ë¡œ, CUBRIDì—서 ì½œë ˆì´ì…˜ì€ 다ìŒê³¼ ê°™ì€ ì†ì„±(property)ì„ ê°–ëŠ”ë‹¤. * **세기(strength)**: 기본 ë¹„êµ í•목들(문ìžë“¤)ì´ ì–´ë–»ê²Œ 다른지 나타내는 ì¸¡ì • 기준ì´ë‹¤. ì´ê²ƒì€ ì„ íƒë„(selectivity)ì— ì˜í–¥ì„ 준다. LDML 파ì¼ì—서 ì½œë ˆì´ì…˜ì˜ 세기는 네 가지 수준(level)으로 ì„¤ì •í• ìˆ˜ 있다. 예를 들어, ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì€ level = "secondary" (2) ë˜ëŠ” "primary" (1)로 ì„¤ì •í•´ì•¼ 한다. * **확장(expansion)** ê³¼ **축약(contraction)** ì§€ì› ì—¬ë¶€ ê°ê°ì˜ ì¹¼ëŸ¼ì´ ì½œë ˆì´ì…˜ì„ 가질 수 있기 때문ì—, :func:`LOWER`, :func:`UPPER` 함수 ë“±ì„ ì ìš©í• ë•Œ 해당 ì½œë ˆì´ì…˜ì˜ 기본 언어ì—서 ì •ì˜í•œ ë¡œìº˜ì˜ ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 규칙(casing rule)ì´ ì‚¬ìš©ëœë‹¤. ì½œë ˆì´ì…˜ ì†ì„±ì— ë”°ë¼ ì¼ë¶€ ì½œë ˆì´ì…˜ì—서 다ìŒê³¼ ê°™ì€ íŠ¹ì • CUBRID 최ì 화가 ë™ìž‘하지 ì•Šì„ ìˆ˜ 있다. * **LIKE** 구문 재작성: ê°™ì€ ê°€ì¤‘ì¹˜(weight)ì— ì—¬ëŸ¬ ê°œì˜ ë‹¤ë¥¸ 문ìžë¥¼ 매핑하는 ì½œë ˆì´ì…˜, 예를 들어 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì—서는 **LIKE** êµ¬ë¬¸ì´ ìž¬ìž‘ì„±ë˜ì§€ 않는다. * ì»¤ë²„ë§ ì¸ë±ìФ 스캔: ê°™ì€ ê°€ì¤‘ì¹˜ì— ì—¬ëŸ¬ ê°œì˜ ë‹¤ë¥¸ 문ìžë¥¼ 매핑하는 ì½œë ˆì´ì…˜ì—서는 ì»¤ë²„ë§ ì¸ë±ìФ ìŠ¤ìº”ì´ ë™ìž‘하지 않는다(:ref:`covering-index` ì°¸ê³ ). ì´ì— 관한 보다 ìžì„¸í•œ ì„¤ëª…ì€ :ref:`collation-setting-impacted-features` ì„ ì°¸ê³ í•˜ë©´ ëœë‹¤. .. _collation-naming-rules: ì½œë ˆì´ì…˜ 명명 규칙 ------------------ ì½œë ˆì´ì…˜ ì´ë¦„ì€ ë‹¤ìŒ ê·œì¹™ì„ ë”°ë¥¸ë‹¤. :: <charset>_<lang specific>_<desc1>_<desc2>_... * <charset>: 문ìžì…‹ ì´ë¦„. iso88591, utf8, euckrì´ ìžˆë‹¤. * <lang specific>: ì§€ì—/언어를 나타내며, en, de, es, fr, it, ja, km, ko, tr, vi, zh, roê°€ 있다. íŠ¹ì • 언어를 나타내지 ì•Šì„ ë•ŒëŠ” "gen"으로 ì¼ë°˜ì ì¸ ì •ë ¬ ê·œì¹™ì„ ì˜ë¯¸í•œë‹¤. * <desc1>_<desc2>_...: 대부분 LDML ì½œë ˆì´ì…˜ì—ë§Œ ì ìš©ë˜ë©° ê°ê° 다ìŒì˜ ì˜ë¯¸ë¥¼ 갖는다. * ci: ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 안 함. LDML 파ì¼ì—서 다ìŒì„ ì„¤ì •í•˜ë©´ ì ìš©ëœë‹¤: strength="secondary" caseLevel="off" caseFirst="off" * cs: ëŒ€ì†Œë¬¸ìž êµ¬ë¶„. 기본ì 으로 ëª¨ë“ ì½œë ˆì´ì…˜ì€ 대소문ìžë¥¼ 구분한다. LDML 파ì¼ì—서 다ìŒì„ ì„¤ì •í•˜ë©´ ì ìš©ëœë‹¤: strength="tertiary" * bin: ì •ë ¬ 순서가 코드í¬ì¸íŠ¸ì˜ ìˆœì„œì™€ 똑같ìŒ. ë©”ëª¨ë¦¬ì˜ ë°”ì´íЏ 순서를 비êµí•˜ë©´ ê±°ì˜ ê°™ì€ ê²°ê³¼ê°€ 나오는ë°, 공백 문ìžì™€ EUCì˜ ë”블 ë°”ì´íЏ 패딩 문ìžëŠ” "bin" ì½œë ˆì´ì…˜ì—서 í•ìƒ 0으로 ì •ë ¬ëœë‹¤. LDML 파ì¼ì—는 bin ì½œë ˆì´ì…˜ì„ ì„¤ì •í•˜ëŠ” ë°©ë²•ì´ ì—†ëŠ”ë°(bin ì½œë ˆì´ì…˜ì€ ì´ë¯¸ 내장ë˜ì–´ 있ìŒ), LDML 파ì¼ì—서 다ìŒì„ ì„¤ì •í•˜ë©´ 비슷하게 ì ìš©ëœë‹¤: strength="quaternary" ë˜ëŠ” strength="identical" * ai: 악센트 구분 안 함. 예를 들어, 'Ã'는 'A'와 ê°™ì€ ìˆœì„œì´ë‹¤. ì´ëŠ” ë˜í•œ 대소문ìžë¥¼ 구분하지 않는다. LDML 파ì¼ì—서 (strength="primary")를 ì„¤ì •í•˜ë©´ ì ìš©ëœë‹¤. * uca: UCA(Unicode Collation Algorithm) 기반 ì½œë ˆì´ì…˜ì„ ì˜ë¯¸í•¨. ë‚´ìž¥ëœ ë³€í˜• ì½œë ˆì´ì…˜ê³¼ 구별하기 위해서만 사용ëœë‹¤. 즉, ëª¨ë“ LDML ì½œë ˆì´ì…˜ì€ UCA를 기반으로 하지만 ì§§ì€ ì´ë¦„ì„ ìœ ì§€í•˜ê¸° 위해 "_uca"ê°€ ìƒëžµë˜ë©°, 예외ì 으로 'utf8_ko_cs_uca', 'utf8_tr_cs_uca' ì´ ë‘ ê°œì˜ ì½œë ˆì´ì…˜ë§Œ ë‚´ìž¥ëœ 'utf8_ko_cs', 'utf8_tr_cs' ì½œë ˆì´ì…˜ê³¼ 구별하기 위해 사용ëœë‹¤. * exp: 다른 ì½œë ˆì´ì…˜ë“¤ì´ ë¬¸ìž ë‹¨ìœ„ë¡œ 비êµí•˜ëŠ” ê²ƒì— ë°˜í•´, :ref:`expansion` ì€ ì „ì²´ 단어 매ì¹/ë¹„êµ ì•Œê³ ë¦¬ì¦˜ì„ ì‚¬ìš©í•œë‹¤. ì´ ì½œë ˆì´ì…˜ì€ ì¢€ë” ë³µìž¡í•œ ì•Œê³ ë¦¬ì¦˜ì„ ì‚¬ìš©í•˜ë¯€ë¡œ 훨씬 ëŠë¦´ 수 있지만, 알파벳 ì •ë ¬ì— ìœ ìš©í• ìˆ˜ 있다. LDML 파ì¼ì— 다ìŒì´ 명시ë˜ì–´ì•¼ 한다: CUBRIDExpansions="use" * ab: ì—순 액센트(accent backwards). 특히 ìºë‚˜ë‹¤ 프랑스어ì—ë§Œ ì ìš©ë˜ëŠ”ë°, UCA 2단계(액센트 가중치를 ì €ìž¥)는 문ìžì—´ì˜ ëì—서부터 시작 방향으로 비êµëœë‹¤. ì´ ì½œë ˆì´ì…˜ ì„¤ì •ì€ ì˜¤ì§ :ref:`expansion` ì´ í™œì„±í™”ë˜ëŠ” 경우ì—ë§Œ 사용ë 수 있다. "ab" ì„¤ì •ì€ ë‹¤ìŒ ì •ë ¬ì„ í—ˆìš©í•œë‹¤. * ì¼ë°˜ì ì¸ ì•¡ì„¼íŠ¸ 순서: cote < coté < côte < côté * ì—ë°©í–¥ 액센트 순서: cote < côte < coté < côté * cbm: 축약 ì˜ì— 매ì¹(contraction boundary match). :ref:`expansion` ê³¼ :ref:`contraction` ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì˜ 특별한 ì½œë ˆì´ì…˜ì´ë©°, 매ì¹ë˜ëŠ” 문ìžì—´ì—서 :ref:`contraction` ì´ ë°œê²¬ë 때 ë™ìž‘하는 ë°©ë²•ì„ ì„¤ì •í•œë‹¤. ì½œë ˆì´ì…˜ì˜ :ref:`contraction` ì„ "ch"로 ì •ì˜í–ˆë‹¤ê³ ê°€ì •í•˜ìž. 그러면 ì¼ë°˜ì 으로 "bac"ë¼ëŠ” íŒ¨í„´ì€ ë¬¸ìžì—´ "bachxxx"와는 매ì¹ë˜ì§€ 않는다. 그러나 ì½œë ˆì´ì…˜ì´ "ì¶•ì•½ì„ ì‹œìž‘í•˜ëŠ” ë¬¸ìž ë§¤ì¹"ì„ í—ˆìš©í•˜ë„ë¡ ì„¤ì •ë˜ë©´, 앞서 ë§í•œ 문ìžì—´ë“¤ì€ 매ì¹ëœë‹¤. ì´ëŸ¬í•œ ì‹ìœ¼ë¡œ ë™ìž‘하는 ì½œë ˆì´ì…˜ì€ 'utf8_ja_exp_cbm' ë°–ì— ì—†ëŠ”ë°, ì¼ë³¸ì–´ ì •ë ¬ì€ ë¬´ìˆ˜ížˆ ë§Žì€ :ref:`contraction` ì„ ìš”êµ¬í•œë‹¤. ì½œë ˆì´ì…˜ ì´ë¦„ì€ ë™ì 으로 ìƒì„±ë˜ì§€ 않는다. LDMLì— ì •ì˜ë˜ì–´ 있으며, ì½œë ˆì´ì…˜ ì„¤ì •ì„ ë°˜ì˜í•´ì•¼ 한다. ì½œë ˆì´ì…˜ ì´ë¦„ì€ ì½œë ˆì´ì…˜ì˜ ë‚´ë¶€ì ì¸ IDì— ì˜í–¥ì„ 준다. CUBRID는 256 ê°œì˜ ì½œë ˆì´ì…˜ì„ 허용하며, ê° ì‹ë³„ìžë“¤ì€ 다ìŒê³¼ ê°™ì´ ë“±ë¡ëœë‹¤. * 0 - 31: 내장ëœ(built-in) ì½œë ˆì´ì…˜(ì´ë¦„ê³¼ ì‹ë³„ìžê°€ ì œí’ˆì— í¬í•¨ë¨) * 32 - 46: 언어 ë¶€ë¶„ì— "gen"ì„ ê°€ì§€ëŠ” LDML ì½œë ˆì´ì…˜ * 47 - 255: 나머지 LDML ì½œë ˆì´ì…˜ CUBRIDê°€ ì œê³µí•˜ëŠ” ëª¨ë“ ë¡œìº˜ì„ ë°ì´í„°ë² ì´ìŠ¤ì— í¬í•¨í•˜ê³ 싶다면, ë¨¼ì € $CUBRID/conf ë””ë ‰í„°ë¦¬ì˜ cubrid_locales.all.txt 파ì¼ì„ cubrid_locales.txt 파ì¼ë¡œ 복사한다. ê·¸ë¦¬ê³ , make_locale 스í¬ë¦½íЏ(확장ìžê°€ Linux는 .sh, Windows는 .bat)를 실행하면 ëœë‹¤. make_locale 스í¬ë¦½íŠ¸ì— ëŒ€í•œ ìžì„¸í•œ ì„¤ëª…ì€ :ref:`locale-compilation`\ 를 ì°¸ê³ í•˜ë©´ ëœë‹¤. ê¸°ì¡´ì˜ ë°ì´í„°ë² ì´ìŠ¤ì— ìƒˆë¡œ 추가한 로캘 ì •ë³´ë¥¼ í¬í•¨í•˜ê³ 싶다면 cubrid synccolldb <dbname>ì„ ì‹¤í–‰í•œë‹¤. ì´ì— 대한 ìžì„¸í•œ ì„¤ëª…ì€ :ref:`synccolldb`\ 를 ì°¸ê³ í•˜ë©´ ëœë‹¤. LDML 파ì¼ë¡œ ì •ì˜ëœ ë¡œìº˜ì„ ëª¨ë‘ í¬í•¨í•˜ëŠ” 경우 CUBRID는 다ìŒì˜ ì½œë ˆì´ì…˜ì„ 가진다. .. _cubrid-all-collation: CUBRID ì½œë ˆì´ì…˜ ^^^^^^^^^^^^^^^ +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | ì½œë ˆì´ì…˜ | ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì„ ìœ„í•œ 로캘 | ë¬¸ìž ë²”ìœ„ | +===================+=======================================================================+===========================================+ | iso88591_bin | en_US - ì˜ì–´ | ASCII + ISO88591 (C0-FE, except D7, F7) | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | iso88591_en_cs | en_US - ì˜ì–´ | ASCII + ISO88591 (C0-FE, except D7, F7) | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | iso88591_en_ci | en_US - ì˜ì–´ | ASCII + ISO88591 (C0-FE, except D7, F7) | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_bin | en_US - ì˜ì–´ | ASCII | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | euckr_bin | ko_KR - 한êµì–´, en_US - ì˜ì–´ì™€ ê°™ìŒ | ASCII | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_en_cs | en_US - ì˜ì–´ | ASCII | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_en_ci | en_US - ì˜ì–´ | ASCII | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_tr_cs | tr_TR - 터키어 | 터키어 알파벳 | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_ko_cs | ko_KR - 한êµì–´, en_US - ì˜ì–´ì™€ ê°™ìŒ | ASCII | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_gen | de_DE - ë…ì¼ì–´, ë…ì¼ì–´ ê·œì¹™ì— ë§žê²Œ 대소문ìžë¥¼ 커스터마ì´ì§•한 ìœ ë‹ˆì½”ë“œ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_gen_ai_ci | de_DE - ë…ì¼ì–´, ë…ì¼ì–´ ê·œì¹™ì— ë§žê²Œ 대소문ìžë¥¼ 커스터마ì´ì§•한 ìœ ë‹ˆì½”ë“œ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_gen_ci | de_DE - ë…ì¼ì–´, ë…ì¼ì–´ ê·œì¹™ì— ë§žê²Œ 대소문ìžë¥¼ 커스터마ì´ì§•한 ìœ ë‹ˆì½”ë“œ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_de_exp_ai_ci | de_DE - ë…ì¼ì–´, ë…ì¼ì–´ ê·œì¹™ì— ë§žê²Œ 대소문ìžë¥¼ 커스터마ì´ì§•한 ìœ ë‹ˆì½”ë“œ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_de_exp | de_DE - ë…ì¼ì–´, ë…ì¼ì–´ ê·œì¹™ì— ë§žê²Œ 대소문ìžë¥¼ 커스터마ì´ì§•한 ìœ ë‹ˆì½”ë“œ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_ro_cs | ro_RO - 루마니아어, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_es_cs | es_ES - 스페ì¸ì–´, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_fr_exp_ab | fr_FR - 프랑스어, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_ja_exp | ja_JP - ì¼ë³¸ì–´, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_ja_exp_cbm | ja_JP - ì¼ë³¸ì–´, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_km_exp | km_KH - 캄보디아어, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_ko_cs_uca | ko_KR - 한êµì–´, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_tr_cs_uca | tr_TR - 터키어, 터키어 ê·œì¹™ì— ë§žê²Œ 대소문ìžë¥¼ 커스터마ì´ì§•한 ìœ ë‹ˆì½”ë“œ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | utf8_vi_cs | vi_VN - ë² íŠ¸ë‚¨ì–´, ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ë™ì¼ | 0000-FFFF ë²”ìœ„ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ | binary | none (invariant to casing operations) | any byte value (null-terminator는 0) | +-------------------+-----------------------------------------------------------------------+-------------------------------------------+ í„°í‚¤ì–´ì˜ ëŒ€ì†Œë¬¸ìž ê·œì¹™ì€ i,I,ı,İ ì— ëŒ€í•´ 대소문ìžë¥¼ 바꾼다. ë…ì¼ì–´ ëŒ€ì†Œë¬¸ìž ê·œì¹™ì€ ÃŸì— ëŒ€í•´ 대소문ìžë¥¼ 바꾼다. 위ì—서 iso88591_bin, iso88591_en_cs, iso88591_en_ci, utf8_bin, euckr_bin, utf8_en_cs, utf8_en_ci, utf8_tr_cs, utf8_ko_cs와 ê°™ì€ 9ê°œì˜ ì½œë ˆì´ì…˜ì€ CUBRIDì— ê¸°ë³¸ì 으로 내장ë˜ì–´ 있다. 한 ê°œ ì´ìƒì˜ ë¡œì¼€ì¼ íŒŒì¼(.ldml)ì— ì½œë ˆì´ì…˜ì´ í¬í•¨ë˜ì–´ 있는 경우 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì„ ìœ„í•œ 로케ì¼(ì½œë ˆì´ì…˜ì˜ 기본 로케ì¼)ì´ ì²« 번째로 í¬í•¨ë˜ëŠ” 로케ì¼ì´ë‹¤. 로딩 순서는 $CUBRID/conf/cubrid_locales.txtì˜ ë¡œì¼€ì¼ ìˆœì„œì™€ 같다. ì½œë ˆì´ì…˜ utf8_gen, utf8_gen_ci, utf8_gen_ai_ciì— ëŒ€í•œ ìœ„ì˜ ë¡œì¼€ì¼ ëŒ€ì†Œë¬¸ìžëŠ” cubrid_locales.txtì˜ ê¸°ë³¸ 순서(알파벳 순서)를 따르므로 ëª¨ë“ ì¼ë°˜ LDML ì½œë ˆì´ì…˜ì˜ 기본 로케ì¼ì€ de_DE(ë…ì¼ì–´)ê°€ ëœë‹¤. 로캘 ì €ìž¥ 위치 -------------- CUBRID는 로캘 ì„¤ì •ì„ ìœ„í•´ 여러 ë””ë ‰í„°ë¦¬ì™€ 파ì¼ë“¤ì„ 사용한다. * **$CUBRID/conf/cubrid_locales.txt** 파ì¼: ì‚¬ìš©í• ë¡œìº˜ 리스트를 í¬í•¨í•˜ëŠ” 초기 ì„¤ì • íŒŒì¼ * **$CUBRID/conf/cubrid_locales.all.txt** 파ì¼: **cubrid_locales.txt** 와 ê°™ì€ êµ¬ì¡°ë¥¼ 갖는 초기 ì„¤ì • 파ì¼ì˜ 템플릿. 사용ìžê°€ ì§ì ‘ ì •ì˜í•˜ì§€ ì•Šì•„ë„ ë˜ëŠ” CUBRIDê°€ 현재 ì§€ì›í•˜ëŠ” CUBRID 로캘 ë²„ì „ì˜ ì „ì²´ 리스트를 í¬í•¨í•œë‹¤. * **$CUBRID/locales/data** ë””ë ‰í„°ë¦¬: 로캘 ë°ì´í„°ë¥¼ ìƒì„±í•˜ëŠ”ë° í•„ìš”í•œ 파ì¼ë“¤ì„ í¬í•¨í•œë‹¤. * **$CUBRID/locales/loclib** ë””ë ‰í„°ë¦¬: 로캘 ë°ì´í„°ë¥¼ í¬í•¨í•˜ëŠ” ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ ìƒì„±ì„ 위한 C 언어로 ìž‘ì„±ëœ **locale_lib_common.h** í—¤ë” íŒŒì¼ê³¼ 빌드를 위한 makefileì„ í¬í•¨í•œë‹¤. * **$CUBRID/locales/data/ducet.txt** 파ì¼: 코드í¬ì¸íЏ, 축약과 확장 등과 ê°™ì€ ê¸°ë³¸ì ì¸ ë²”ìš© ì½œë ˆì´ì…˜ ì •ë³´ì™€ ì´ë“¤ì˜ 가중치 ê°’ì„ í‘œí˜„í•˜ëŠ” 파ì¼ë¡œ, ì´ ì •ë³´ë“¤ì€ ìœ ë‹ˆì½”ë“œ ì»¨ì†Œì‹œì—„ì— ì˜í•´ ì œì •ëœ í‘œì¤€ì„ ë”°ë¥¸ë‹¤. ìžì„¸í•œ 사í•ì€ http://unicode.org/reports/tr10/#Default_Unicode_Collation_Element_Table ì„ ì°¸ê³ í•œë‹¤. * **$CUBRID/locales/data/unicodedata.txt** 파ì¼: ëŒ€ì†Œë¬¸ìž êµ¬ë³„, ë¶„í•´, ì •ê·œí™” 등 ê°ê°ì˜ ìœ ë‹ˆì½”ë“œ 코드 í¬ì¸íŠ¸ë¥¼ í¬í•¨í•˜ëŠ” 파ì¼ë¡œ, CUBRID는 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ê·œì¹™ì„ ê²°ì •í•˜ê¸° 위해 ì´ íŒŒì¼ì„ 사용한다. ë” ë§Žì€ ì •ë³´ëŠ” https://docs.python.org/3/library/unicodedata.html ì„ ì°¸ê³ í•œë‹¤. * **$CUBRID/locales/data/ldml** ë””ë ‰í„°ë¦¬: common_collations.xml 파ì¼ê³¼ cubrid_<*locale_name*>.xml 형ì‹ì˜ ì´ë¦„ì„ ì§€ë‹ˆëŠ” XML 파ì¼ë“¤ì„ í¬í•¨í•œë‹¤. common_collations.xml 파ì¼ì€ ëª¨ë“ ë¡œìº˜ì—서 ê³µìœ ë˜ëŠ” ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ 표현하며, ê°ê°ì˜ cubrid_<*locale_name*>.xml 파ì¼ì€ 해당 ì–¸ì–´ì— ëŒ€í•œ 로캘 ì •ë³´ë¥¼ 표현한다. * **$CUBRID/locales/data/codepages** ë””ë ‰í„°ë¦¬: 한 ë°”ì´íЏ 코드 페ì´ì§€ë“¤ì„ 위한 코드 페ì´ì§€ 콘솔 변환용 파ì¼ë“¤(8859-1.txt, 8859-15.txt, 8859-9.txt)ê³¼ 멀티바ì´íЏ 코드 페ì´ì§€ë¥¼ 위한 코드 페ì´ì§€ 콘솔 변환용 파ì¼ë“¤(CP1258.txt, CP923.txt, CP936.txt, CP949.txt)ì„ í¬í•¨í•œë‹¤. * **$CUBRID/bin/make_locale.sh** íŒŒì¼ ë˜ëŠ” **%CUBRID%\\bin\\make_locale.bat** 파ì¼(Windows): 로캘 ë°ì´í„°ë¥¼ 표현하는 ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ìƒì„±í•˜ê¸° 위해 사용ë˜ëŠ” 스í¬ë¦½íЏ 파ì¼ì´ë‹¤. * **$CUBRID/lib** ë””ë ‰í„°ë¦¬: 로캘 ë°ì´í„°ë¥¼ 표현하는 ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ 파ì¼ì´ ì €ìž¥ëœë‹¤. .. _locale-setting: 로캘 ì„¤ì • ========= íŠ¹ì • ì–¸ì–´ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ ì‚¬ìš©í•˜ë ¤ë©´ 해당 문ìžì…‹ì€ 새로 ìƒì„±í• ë°ì´í„°ë² ì´ìŠ¤ì™€ 반드시 ì¼ì¹˜í•´ì•¼ 한다. CUBRIDê°€ ì§€ì›í•˜ëŠ” 문ìžì…‹ì€ ISO-8859-1, EUC-KR, UTF-8ì´ë©°, ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìƒì„±í• 때 사용하게 ë 문ìžì…‹ì€ ë°ì´í„°ë² ì´ìФ ìƒì„± 시 ì§€ì •ëœë‹¤. 예를 들어, ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìƒì„± 시 ë¡œìº˜ì„ ko_KR.utf8로 ì§€ì •í–ˆìœ¼ë©´ í…Œì´ë¸” ë° ì¹¼ëŸ¼ ìƒì„±, ì½œë ˆì´ì…˜ 변경 등ì—서 utf8_ja_expê³¼ ê°™ì´ "utf8\_"로 시작하는 ì½œë ˆì´ì…˜ì„ ëª¨ë‘ ì‚¬ìš©í• ìˆ˜ 있으나, ko_KR.euckr로 ì„¤ì •í•˜ë©´ 다른 문ìžì…‹ê³¼ ê´€ë ¨ëœ ì½œë ˆì´ì…˜ì„ ëª¨ë‘ ì‚¬ìš©í• ìˆ˜ 없게 ëœë‹¤. (:ref:`cubrid-all-collation` ì°¸ê³ ) 다ìŒì€ ë¡œìº˜ì„ en_US.utf8로 ì„¤ì •í•˜ì—¬ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìƒì„±í•œ 후, ì½œë ˆì´ì…˜ utf8_ja_exp를 사용한 예ì´ë‹¤. #. cd $CUBRID/conf #. cp cubrid_locales.all.txt cubrid_locales.txt #. make_locale.sh -t64 # 64 bit locale library creation #. cubrid createdb testdb en_US.utf8 #. cubrid server start testdb #. csql -u dba testdb #. csqlì—서 아래 ì§ˆì˜ ìˆ˜í–‰ .. code-block:: sql SET NAMES utf8; CREATE TABLE t1 (i1 INT , s1 VARCHAR(20) COLLATE utf8_ja_exp, a INT, b VARCHAR(20) COLLATE utf8_ja_exp); INSERT INTO t1 VALUES (1, 'ã„イ基盤',1,'ã„イ ç¹'); 보다 ìžì„¸í•œ ì„¤ëª…ì€ ì•„ëž˜ë¥¼ ì°¸ê³ í•œë‹¤. .. _locale-selection: 1단계: 로캘 ì„ íƒ ---------------- ì‚¬ìš©í•˜ë ¤ëŠ” ë¡œìº˜ì„ **$CUBRID/conf/cubrid_locales.txt** ì— ì§€ì •í•œë‹¤. ëª¨ë‘ ì„ íƒí•˜ê±°ë‚˜ 부분만 ì„ íƒí• 수 있다. CUBRIDê°€ 현재 ì§€ì›í•˜ëŠ” ë¡œìº˜ì€ en_US, de_DE, es_ES, fr_FR, it_IT, ja_JP, km_KH, ko_KR, tr_TR, vi_VN, zh_CN, ro_ROì´ë©°, ì´ ëª©ë¡ì€ **$CUBRID/conf/cubrid_locales.all.txt**\ ì— ìž‘ì„±ë˜ì–´ 있다. ê° ë¡œìº˜ ì´ë¦„ ë° ì–¸ì–´, 사용 êµê°€ëŠ” ë‹¤ìŒ í‘œì™€ 같다. +------------+-----------------------+ | 로캘 ì´ë¦„ | 언어 - 사용 êµê°€ | +============+=======================+ | en_US | ì˜ì–´ - ë¯¸êµ | +------------+-----------------------+ | de_DE | ë…ì¼ì–´ - ë…ì¼ | +------------+-----------------------+ | es_ES | 스페ì¸ì–´ - ìŠ¤íŽ˜ì¸ | +------------+-----------------------+ | fr_FR | 프랑스어 - 프랑스 | +------------+-----------------------+ | it_IT | ì´íƒœë¦¬ì–´ - ì´íƒˆë¦¬ì•„ | +------------+-----------------------+ | ja_JP | ì¼ë³¸ì–´ - ì¼ë³¸ | +------------+-----------------------+ | km_KH | í¬ë©”르어 - 캄보디아 | +------------+-----------------------+ | ko_KR | 한êµì–´ - ëŒ€í•œë¯¼êµ | +------------+-----------------------+ | tr_TR | 터키어 - 터키 | +------------+-----------------------+ | vi_VN | ë² íŠ¸ë‚¨ì–´ - ë² íŠ¸ë‚¨ | +------------+-----------------------+ | zh_CN | 중êµì–´ - ì¤‘êµ | +------------+-----------------------+ | ro_RO | 루마니아어 - 루마니아 | +------------+-----------------------+ .. note:: ì§€ì›í•˜ëŠ” ë¡œìº˜ë“¤ì„ ìœ„í•œ LDML 파ì¼ë“¤ì€ cubrid_<*locale_name*>.xml 파ì¼ë¡œ 명명ë˜ë©°, **$CUBRID/locales/data/ldml** í´ë”ì— ì €ìž¥ëœë‹¤. ì§€ì›í•˜ë ¤ëŠ” ë¡œìº˜ì— í•´ë‹¹í•˜ëŠ” LDML 파ì¼ì´ **$CUBRID/locales/data/ldml** ë””ë ‰í„°ë¦¬ì— ì¡´ìž¬í•´ì•¼ 한다. **cubrid_locales.txt**\ ì— ë¡œìº˜ì´ ì§€ì •ë˜ì§€ 않거나 cubrid_<*locale_name*>.xml 파ì¼ì´ 존재하지 않으면 해당 ë¡œìº˜ì„ ì‚¬ìš©í• ìˆ˜ 없다. 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ë“¤ì€ **$CUBRID/conf/cubrid_locales.txt** ì„¤ì • 파ì¼ì— ì˜í•´ ìƒì„±ë˜ëŠ”ë°, ì´ íŒŒì¼ì€ ì›í•˜ëŠ” ë¡œìº˜ë“¤ì˜ ì–¸ì–´ ì½”ë“œë“¤ì„ í¬í•¨í•˜ê³ 있다. 사용ìžê°€ ì •ì˜í•˜ëŠ” ëª¨ë“ ë¡œìº˜ë“¤ì€ UTF-8 문ìžì…‹ìœ¼ë¡œë§Œ ìƒì„±ëœë‹¤. ë˜í•œ ì´ íŒŒì¼ì„ 통해서 ê° ë¡œìº˜ LDML 파ì¼ì— 대한 íŒŒì¼ ê²½ë¡œì™€ ë¼ì´ë¸ŒëŸ¬ë¦¬ë“¤ì„ ì„ íƒì 으로 ì„¤ì •í• ìˆ˜ 있다. :: <lang_name> <LDML file> <lib file> ko_KR /home/CUBRID/locales/data/ldml/cubrid_ko_KR.xml /home/CUBRID/lib/libcubrid_ko_KR.so 기본ì 으로 LDML 파ì¼ì€ **$CUBRID/locales/data/ldml** ë””ë ‰í„°ë¦¬ì—, 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ë“¤ì€ **$CUBRID/lib** ë””ë ‰í„°ë¦¬ì— ì¡´ìž¬í•œë‹¤. ì´ì™€ ê°™ì´ LDML 파ì¼ê³¼ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 기본 ìœ„ì¹˜ì— ì¡´ìž¬í•œë‹¤ë©´ <*lang_name*>ë§Œ ìž‘ì„±í•´ë„ ëœë‹¤. LDMLì„ ìœ„í•œ íŒŒì¼ ì´ë¦„ 형ì‹ì€ cubrid_<*lang_name*>.ldmlì´ë‹¤. ë¼ì´ë¸ŒëŸ¬ë¦¬ì— 대한 íŒŒì¼ ì´ë¦„ 형ì‹ì€ Linuxì—서는 libcubrid_<*lang_name*>.so, Windowsì—서는 libcubrid_<*lang_name*>.dllì´ë‹¤. .. _locale-compilation: 2단계: 로캘 컴파ì¼í•˜ê¸° ---------------------- 1단계ì—서 설명한 요구사í•ë“¤ì´ ì¶©ì¡±ë˜ì—ˆë‹¤ë©´ 로캘 ë°ì´í„°ë¥¼ 컴파ì¼í• 수 있다. CUBRIDì— ë‚´ìž¥ëœ ë¡œìº˜ì„ ì‚¬ìš©í•œë‹¤ë©´ ì‚¬ìš©ìž ë¡œìº˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 컴파ì¼í•˜ì§€ ì•Šê³ ì‚¬ìš©í• ìˆ˜ 있으므로 2단계를 ìƒëžµí• 수 있으나, ë‚´ìž¥ëœ ë¡œìº˜ê³¼ ë¼ì´ë¸ŒëŸ¬ë¦¬ 로캘ì—는 ì°¨ì´ê°€ 있다. ì´ì™€ ê´€ë ¨í•˜ì—¬ :ref:`ë‚´ìž¥ëœ ë¡œìº˜ê³¼ ë¼ì´ë¸ŒëŸ¬ë¦¬ 로캘 <built-in-locale-limit>`\ ì„ ì°¸ê³ í•œë‹¤. 로캘 ë°ì´í„°ë¥¼ 컴파ì¼í•˜ë ¤ë©´ **make_locale** 스í¬ë¦½íЏ(파ì¼ì˜ 확장ìžëŠ” Linuxì—ì„ **.sh**, Windowsì—ì„ **.bat**)를 사용한다. ì´ ìŠ¤í¬ë¦½íŠ¸ëŠ” **$CUBRID/bin** ë””ë ‰í„°ë¦¬ì— ìœ„ì¹˜í•˜ë©°, ì´ ê²½ë¡œê°€ **$PATH** 환경 ë³€ìˆ˜ì— í¬í•¨ë˜ì–´ì•¼ 한다. 여기서 **$CUBRID**, **$PATH** 는 Linuxì˜ í™˜ê²½ 변수ì´ë©°, Windowsì—서는 **%CUBRID%**, **%PATH%**\ ì´ë‹¤. .. note:: **make_locale** 스í¬ë¦½íŠ¸ë¥¼ Windowsì—서 ì‹¤í–‰í•˜ë ¤ë©´, Visual C++ 2005, 2008 ë˜ëŠ” 2010 중 하나가 설치ë˜ì–´ 있어야 한다. ì‚¬ìš©ë²•ì€ **make_locale.sh** **-h** ëª…ë ¹(Windows는 **make_locale /h**)ì„ ì‹¤í–‰í•˜ë©´ ì¶œë ¥ë˜ë©°, 사용 êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: make_locale.sh [options] [locale] options ::= [-t 32 | 64 ] [-m debug | release] locale ::= [de_DE | es_ES | fr_FR | it_IT | ja_JP | km_KH | ko_KR | tr_TR | vi_VN | zh_CN |ro_RO] * *options* * **-t**: 32비트 ë˜ëŠ” 64비트 중 하나를 ì„ íƒí•œë‹¤(기본값: **64**). * **-m**: **release** ë˜ëŠ” **debug** 중 하나를 ì„ íƒí•œë‹¤. ì¼ë°˜ì ì¸ ì‚¬ìš©ì„ ìœ„í•´ì„œëŠ” **release를** ì„ íƒí•œë‹¤(기본값: **release**). **debug** 모드는 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì§ì ‘ ìž‘ì„±í•˜ë ¤ëŠ” 개발ìžë¥¼ 위해 ì œê³µí•œë‹¤. * *locale*: ë¹Œë“œí• ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 로캘 ì´ë¦„. *locale* ì´ ì£¼ì–´ì§€ì§€ 않으면, ì„¤ì •í•œ ëª¨ë“ ë¡œìº˜ì˜ ë°ì´í„°ë¥¼ í¬í•¨í•˜ë„ë¡ ë¹Œë“œëœë‹¤. ì´ ê²½ìš° **$CUBRID/lib** ë””ë ‰í„°ë¦¬ì— **libcubrid_all_locales.so** (Windowsì˜ ê²½ìš° **.dll**)ë¼ëŠ” ì´ë¦„으로 ë¼ì´ë¸ŒëŸ¬ë¦¬ 파ì¼ì´ ì €ìž¥ëœë‹¤. 여러 ë¡œìº˜ì— ëŒ€í•´ì„œ ì‚¬ìš©ìž ì •ì˜ ë¡œìº˜ ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ë§Œë“¤ë ¤ë©´ ë‹¤ìŒ ë‘ ê°€ì§€ 방법 중 하나를 ì‚¬ìš©í• ìˆ˜ 있다. * ëª¨ë“ ë¡œìº˜ì„ í¬í•¨í•˜ëŠ” í•˜ë‚˜ì˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ ìƒì„±: 다ìŒê³¼ ê°™ì´ ë¡œìº˜ì„ ëª…ì‹œí•˜ì§€ ì•Šê³ ì‹¤í–‰í•œë‹¤. :: make_locale.sh -t64 # Build and pack all locales (64/release) * í•˜ë‚˜ì˜ ë¡œìº˜ë§Œì„ í¬í•¨í•˜ëŠ” ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 여러 ê°œ 반복하여 ìƒì„±: 다ìŒê³¼ ê°™ì´ í•˜ë‚˜ì˜ ì–¸ì–´ë¥¼ ì§€ì •í•œë‹¤. :: make_locale.sh -t 64 -m release ko_KR ì´ì™€ ê°™ì€ ë‘ ê°€ì§€ 방법 중ì—서 첫 번째 ë°©ë²•ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì„ ê¶Œìž¥í•œë‹¤. ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ìƒì„±í•˜ë©´ 로캘들 ê°„ì— ê³µìœ ë 수 있는 ë°ì´í„°ë“¤ì´ 중복ë˜ì§€ 않기 ë•Œë¬¸ì— ë©”ëª¨ë¦¬ ì‚¬ìš©ëŸ‰ì„ ì¤„ì¼ ìˆ˜ 있다. 첫 번째 ë°©ì‹ìœ¼ë¡œ ì§€ì›í•˜ëŠ” ëª¨ë“ ë¡œìº˜ì„ í¬í•¨í•˜ë„ë¡ ìƒì„±í•˜ë©´ 약 15MB ì •ë„ í¬ê¸°ì˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ ìƒì„±ë˜ë©°, ë‘ ë²ˆì§¸ ë°©ì‹ìœ¼ë¡œ ìƒì„±í• 경우ì—는 ì–¸ì–´ì— ë”°ë¼ì„œ 1MBì—서 5MB ì´ìƒì˜ í¬ê¸°ì˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ ìƒì„±ëœë‹¤. ë˜í•œ 첫 번째 ë°©ì‹ì—서는 ë‘ ë²ˆì§¸ ë°©ì‹ì„ ì‚¬ìš©í–ˆì„ ë•Œì— ì„œë²„ 재시작 시ì ë“±ì— ë°œìƒë˜ëŠ” 런타임 오버헤드가 없기 ë•Œë¬¸ì— ëŸ°íƒ€ìž„ì—ë„ ìœ ë¦¬í•˜ë‹¤. .. warning:: **ì œì•½ ì‚¬í• ë° ê·œì¹™** * ì¼ë‹¨ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ ìƒì„±ëœ 후ì—는 **$CUBRID/conf/cubrid_locales.txt** 파ì¼ì„ 변경하면 안 ëœë‹¤. 다시 ë§í•´ì„œ, ì´ íŒŒì¼ì—서 ëª…ì‹œëœ ì–¸ì–´ë“¤ì˜ ìˆœì„œë¥¼ í¬í•¨í•˜ì—¬ ì–´ë–¤ ë‚´ìš©ë„ ë³€ê²½í•´ì„œëŠ” 안 ëœë‹¤. ë¡œìº˜ì´ ì»´íŒŒì¼ë˜ê³ 나면, ì¼ë°˜ ì½œë ˆì´ì…˜(generic collation)ì€ **cubrid_locales.txt**\ì— ì¡´ìž¬í•˜ëŠ” 첫번째 ë¡œìº˜ì„ ê¸°ë³¸ 로캘로 사용한다. ë”°ë¼ì„œ 순서를 바꾸면 해당 ì½œë ˆì´ì…˜(utf8_gen_*)ì— ëŒ€í•œ ëŒ€ì†Œë¬¸ìž ë³€í™˜ 결과가 달ë¼ì§ˆ 수 있다. * **$CUBRID/locales/data/*.txt** 파ì¼ë“¤ì€ 변경ë˜ì–´ì„œëŠ” 안 ëœë‹¤. .. note:: **make_locale.sh(.bat) 스í¬ë¦½íЏ 수행 ì ˆì°¨** make_locale.sh(.bat) 스í¬ë¦½íŠ¸ëŠ” 다ìŒê³¼ ê°™ì€ ìž‘ì—…ì„ ìˆ˜í–‰í•œë‹¤. #. **$CUBRID/locales/data/ducet.txt**, **$CUBRID/locales/data/unicodedata.txt**, **$CUBRID/locales/data/codepages/*.txt** 와 ê°™ì´ ì´ë¯¸ ì„¤ì¹˜ëœ ê³µí†µ 파ì¼ê³¼ 해당 ì–¸ì–´ì˜ **.ldml** 파ì¼ì„ ì½ëŠ”ë‹¤. #. ì›ë³¸(raw) ë°ì´í„°ë¥¼ 처리한 후 **$CUBRID/locales/loclib/locale.c** 임시 파ì¼ì— 로캘 ë°ì´í„°ë¥¼ í¬í•¨í•˜ëŠ” C ìƒìˆ˜ ê°’ê³¼ ë°°ì—´ì„ ìž‘ì„±í•œë‹¤. #. **.so** (**.dll**) 파ì¼ì„ 빌드하기 위해 임시 파ì¼ì¸ **locale.c** 파ì¼ì´ í”Œëž«í¼ ì»´íŒŒì¼ëŸ¬ì— ì „ë‹¬ëœë‹¤. ì´ ë‹¨ê³„ëŠ” 장비가 C/C++ 컴파ì¼ëŸ¬ ë° ë§ì»¤ë¥¼ ê°€ì§€ê³ ìžˆë‹¤ê³ ê°€ì •í•œë‹¤. 현재 Windows ë²„ì „ì—서는 MS Visual Studioê°€, Linux ë²„ì „ì—서는 gcc 컴파ì¼ëŸ¬ê°€ 사용ëœë‹¤. #. 임시 파ì¼ì´ ì‚ì œëœë‹¤. 3단계: íŠ¹ì • ë¡œìº˜ì„ ì‚¬ìš©í•˜ê¸° 위해 CUBRID ì„¤ì •í•˜ê¸° ------------------------------------------------ DB ìƒì„± 시 로캘 ì§€ì •ì„ í†µí•´ ì˜¤ì§ í•˜ë‚˜ì˜ ë¡œìº˜ì„ ê¸°ë³¸ 로캘로 ì§€ì •í• ìˆ˜ 있다. 기본 ë¡œìº˜ì„ ì§€ì •í•˜ì—¬ 기본 캘린ë”ê°€ ì •ì˜ë˜ì§€ë§Œ, **intl_date_lang** 시스템 파ë¼ë¯¸í„°ë¥¼ ì„¤ì •í•˜ë©´ 기본 로캘 ì„¤ì •ë³´ë‹¤ ìš°ì„ ì ìš©ëœë‹¤. * ë¡œìº˜ì˜ ê°’ì€ <*locale_name*>[**.utf8** | **.iso88591**]ê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. (예: tr_TR.utf8, en_US.iso88591, ko_KR.utf8) * **intl_date_lang** 시스템 파ë¼ë¯¸í„°ì˜ ê°’ì€ <*locale_name*>ê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. <*locale_name*>으로 ì‚¬ìš©í• ìˆ˜ 있는 ê°’ì€ :ref:`locale-selection`\ ì„ ì°¸ê³ í•œë‹¤. .. note:: **ì›”, ìš”ì¼, ì˜¤ì „/오후 표기 ë° ìˆ«ìž í˜•ì‹ ì„¤ì •** ë‚ ì§œ/ì‹œê°„ì„ ìž…ì¶œë ¥í•˜ëŠ” 함수ì—서 ê° ë¡œìº˜ ì´ë¦„ì— ë”°ë¼ ìž…ì¶œë ¥í•˜ëŠ” ì›”, ìš”ì¼, ì˜¤ì „/오후 표기 ë°©ë²•ì„ **intl_date_lang** 시스템 파ë¼ë¯¸í„°ë¡œ ì„¤ì •í• ìˆ˜ 있다. ë˜í•œ 문ìžì—´ì„ 숫ìžë¡œ ë˜ëŠ” 숫ìžë¥¼ 문ìžì—´ë¡œ 변환하는 함수ì—서 ê° ë¡œìº˜ì— ë”°ë¼ ìž…ì¶œë ¥í•˜ëŠ” 숫ìžì˜ 문ìžì—´ 형ì‹ì€ **intl_number_lang** 시스템 파ë¼ë¯¸í„°ë¡œ ì„¤ì •í• ìˆ˜ 있다. .. _built-in-locale-limit: ë‚´ìž¥ëœ ë¡œìº˜ê³¼ ë¼ì´ë¸ŒëŸ¬ë¦¬ 로캘 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CUBRIDì— ë‚´ìž¥ëœ ë¡œìº˜ì— ëŒ€í•´ì„œëŠ” ì‚¬ìš©ìž ë¡œìº˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 컴파ì¼í•˜ì§€ ì•Šê³ ì‚¬ìš©í• ìˆ˜ 있으므로 2단계를 ìƒëžµí• 수 있으나, ë‚´ìž¥ëœ ë¡œìº˜ê³¼ ë¼ì´ë¸ŒëŸ¬ë¦¬ 로캘ì—는 다ìŒê³¼ ê°™ì€ ì°¨ì´ê°€ 있다. * 내장ëœ(built-in) 로캘(ê³¼ ì½œë ˆì´ì…˜)ì€ ìœ ë‹ˆì½”ë“œ ë°ì´í„°ë¥¼ ì¸ì‹í•˜ì§€ 못한다. 예를 들어, ë‚´ìž¥ëœ ë¡œìº˜ì€ (Ã, á) ê°„ ëŒ€ì†Œë¬¸ìž ë³€í™˜ì´ ë¶ˆê°€ëŠ¥í•˜ë‹¤. 반면 LDML 로캘(컴파ì¼ëœ 로캘)ì€ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íŠ¸ì— ëŒ€í•œ ë°ì´í„°ë¥¼ 65535개까지 ì§€ì›í•œë‹¤. * ë‚´ìž¥ëœ ì½œë ˆì´ì…˜ì€ ASCII 범위만 다루거나, utf8_tr_csì˜ ê²½ìš° ASCII와 터키어(turkish) 알파벳 글ìžë§Œ 다룬다. ë”°ë¼ì„œ ë‚´ìž¥ëœ UTF-8 ë¡œìº˜ì€ ìœ ë‹ˆì½”ë“œì™€ 호환ë˜ì§€ 않는 반면, LDML 로캘(컴파ì¼ëœ 로캘)ì€ ìœ ë‹ˆì½”ë“œì™€ 호환ëœë‹¤. DB ìƒì„± 시 ì„¤ì •í• ìˆ˜ 있는 내장 ë¡œìº˜ì€ ë‹¤ìŒê³¼ 같다. * en_US.iso88591 * en_US.utf8 * ko_KR.utf8 * ko_KR.euckr * ko_KR.iso88591: ì›”, ìš”ì¼ í‘œì‹œ ë°©ë²•ì€ ë¡œë§ˆìž í‘œê¸°ë¥¼ 따른다(romanized). * tr_TR.utf8 * tr_TR.iso88591: ì›”, ìš”ì¼ í‘œì‹œ ë°©ë²•ì€ ë¡œë§ˆìž í‘œê¸°ë¥¼ 따른다(romanized). DB를 ìƒì„±í•˜ë©´ì„œ 로캘 ê°’ ì§€ì • 시 문ìžì…‹(charset)ì´ ëª…ì‹œë˜ì§€ 않으면 위 순서ì—서 ì•žì— ìžˆëŠ” ë¡œìº˜ì˜ ë¬¸ìžì…‹ìœ¼ë¡œ ê²°ì •ëœë‹¤. 예를 들어, 로캘 ê°’ì´ ko_KR로 ì„¤ì •ë˜ë©´(예: cubrid createdb testdb ko_KR) ìœ„ì˜ ëª©ë¡ì—서 ko_KR 중 가장 ë¨¼ì € 나타나는 ë¡œìº˜ì¸ ko_KR.utf8ì„ ì§€ì •í•œ 것과 같다. ìœ„ì˜ ë‚´ìž¥ëœ ë¡œìº˜ì„ ì œì™¸í•œ 나머지 ì–¸ì–´ì˜ ë¡œìº˜ì€ ë’¤ì— ë°˜ë“œì‹œ **.utf8** ì„ ë¶™ì—¬ì•¼ 한다. 예를 들어, ë…ì¼ì–´ì˜ 경우 로캘 ê°’ì„ de_DE.utf8로 ì§€ì •í•œë‹¤. ko_KR.iso88591ê³¼ tr_TR.iso88591ì—서 월과 ìš”ì¼ì„ 나타낼 때ì—는 ë¡œë§ˆìž í‘œê¸°ë¥¼ 따른다. 예를 들어, 한êµì–´ "ì¼ìš”ì¼"(ì˜ì–´ë¡œ Sunday)ì˜ ë¡œë§ˆìž í‘œê¸°ëŠ” "Iryoil"ì´ë‹¤. ì´ê²ƒì€ ISO-8859-1 문ìžë§Œ ì œê³µí•˜ê¸° 위해서 요구ë˜ëŠ” 사í•ì´ë‹¤. ì´ì— 관한 ìžì„¸í•œ ì„¤ëª…ì€ :ref:`romanized-names`\ 를 ì°¸ê³ í•˜ë©´ ëœë‹¤. .. _romanized-names: ISO-8859-1 문ìžì…‹ì—서 한êµì–´ì™€ í„°í‚¤ì–´ì˜ ì›”, ìš”ì¼ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 문ìžì…‹ì´ UTF-8ì¸ í•œêµì–´ë‚˜ 터키어 ë˜ëŠ” 문ìžì…‹ì´ EUC-KRì¸ í•œêµì–´ì—서 ì›”, ìš”ì¼, ì˜¤ì „/오후 표시는 ê° êµê°€ì— 맞게 ì¸ì½”딩ëœë‹¤. 그러나, ISO-8859-1 문ìžì…‹ì—서 한êµì–´ì™€ í„°í‚¤ì–´ì˜ ì›”, ìš”ì¼, ì˜¤ì „/오후 표시를 ì›ëž˜ì˜ ì¸ì½”딩으로 사용하면 복잡한 표현ì‹ì´ 사용ë˜ëŠ” 경우 서버 프로세스ì—서 예기치 ì•Šì€ í–‰ë™ì´ ë°œìƒí• 수 있기 때문ì—, ë¡œë§ˆìž í‘œê¸°(romanized)로 ì¶œë ¥í•œë‹¤. CUBRIDì˜ ê¸°ë³¸ 문ìžì…‹ì€ ISO-8859-1ì´ë©°, 한êµì–´ì™€ í„°í‚¤ì–´ì˜ ê²½ìš° ì´ ë¬¸ìžì…‹ì„ ì‚¬ìš©í• ìˆ˜ 있다. 한êµì–´ì™€ 터키어ì—서 ê° ìš”ì¼, ì›”, ì˜¤ì „/오후는 로마ìžë¡œ 다ìŒê³¼ ê°™ì´ ì¶œë ¥í•œë‹¤. **ìš”ì¼ì˜ 표기** +---------------------------------------+----------------------------------+----------------------------------+ | 긴/ì§§ì€ í‘œê¸° | 한êµì–´ 긴/ì§§ì€ ë¡œë§ˆìž í‘œê¸° | 터키어 긴/ì§§ì€ í‘œê¸° | +=======================================+==================================+==================================+ | Sunday / Sun | Iryoil / Il | Pazar / Pz | +---------------------------------------+----------------------------------+----------------------------------+ | Monday / Mon | Woryoil / Wol | Pazartesi / Pt | +---------------------------------------+----------------------------------+----------------------------------+ | Tuesday / Tue | Hwayoil / Hwa | Sali / Sa | +---------------------------------------+----------------------------------+----------------------------------+ | Wednesday / Wed | Suyoil / Su | Carsamba / Ca | +---------------------------------------+----------------------------------+----------------------------------+ | Thursday / Thu | Mogyoil / Mok | Persembe / Pe | +---------------------------------------+----------------------------------+----------------------------------+ | Friday / Fri | Geumyoil / Geum | Cuma / Cu | +---------------------------------------+----------------------------------+----------------------------------+ | Saturday / Sat | Toyoil / To | Cumartesi / Ct | +---------------------------------------+----------------------------------+----------------------------------+ **ì›”ì˜ í‘œê¸°** +---------------------------------------+----------------------------------+----------------------------------+ | 긴 / ì§§ì€ í‘œê¸° | 한êµì–´ 긴/ì§§ì€ ë¡œë§ˆìž í‘œê¸° | 터키어 긴 / ì§§ì€ í‘œê¸° | | | (구분 ì—†ìŒ) | | +=======================================+==================================+==================================+ | January / Jan | 1wol | Ocak / Ock | +---------------------------------------+----------------------------------+----------------------------------+ | February / Feb | 2wol | Subat / Sbt | +---------------------------------------+----------------------------------+----------------------------------+ | March / Mar | 3wol | Mart / Mrt | +---------------------------------------+----------------------------------+----------------------------------+ | April / Apr | 4wol | Nisan / Nsn | +---------------------------------------+----------------------------------+----------------------------------+ | May / May | 5wol | Mayis / Mys | +---------------------------------------+----------------------------------+----------------------------------+ | June / Jun | 6wol | Haziran / Hzr | +---------------------------------------+----------------------------------+----------------------------------+ | July / Jul | 7wol | Temmuz / Tmz | +---------------------------------------+----------------------------------+----------------------------------+ | August / Aug | 8wol | Agustos / Ags | +---------------------------------------+----------------------------------+----------------------------------+ | September / Sep | 9wol | Eylul / Eyl | +---------------------------------------+----------------------------------+----------------------------------+ | October / Oct | 10wol | Ekim / Ekm | +---------------------------------------+----------------------------------+----------------------------------+ | November / Nov | 11wol | Kasim / Ksm | +---------------------------------------+----------------------------------+----------------------------------+ | December / Dec | 12wol | Aralik / Arl | +---------------------------------------+----------------------------------+----------------------------------+ **ì˜¤ì „/ì˜¤í›„ì˜ í‘œê¸°** +---------------------------------------+----------------------------------+----------------------------------+ | ì˜¤ì „/오후 표기 | 한êµì–´ ë¡œë§ˆìž í‘œê¸° | 터키어 표기 | +=======================================+==================================+==================================+ | AM | ojeon | AM | +---------------------------------------+----------------------------------+----------------------------------+ | PM | ohu | PM | +---------------------------------------+----------------------------------+----------------------------------+ 4단계: ì„ íƒí•œ 로캘 ì„¤ì •ìœ¼ë¡œ ë°ì´í„°ë² ì´ìФ ìƒì„±í•˜ê¸° ------------------------------------------------- **cubrid createdb** <*db_name*> <*locale_name.charset*>\ ì„ ì‹¤í–‰í•˜ë©´, 해당 언어와 문ìžì…‹ì„ 사용하는 ë°ì´í„°ë² ì´ìŠ¤ê°€ ìƒì„±ëœë‹¤. ì¼ë‹¨ ë°ì´í„°ë² ì´ìŠ¤ê°€ ìƒì„±ë˜ë©´ 해당 ë°ì´í„°ë² ì´ìŠ¤ì— ë¶€ì—¬ëœ ë¡œìº˜ ì„¤ì •ì€ ë°”ê¿€ 수 없다. 문ìžì…‹ê³¼ 로캘 ì´ë¦„ì€ **db_root**\ ë¼ëŠ” 시스템 카탈로그 í…Œì´ë¸”ì— ì €ìž¥ë˜ë©°, ìƒì„± 시ì ì˜ ì„¤ì •ê³¼ 다른 ì„¤ì •ì„ ì‚¬ìš©í•˜ì—¬ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 구ë™í• 수 없다. .. _dumplocale: 5단계(ì„ íƒ ì‚¬í•): 로캘 파ì¼ì˜ ìˆ˜ë™ ê²€ì¦ --------------------------------------- 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ ë‚´ìš©ë“¤ì„ **dumplocale** ìœ í‹¸ë¦¬í‹°ë¥¼ ì´ìš©í•´ì„œ ì‚¬ëžŒì´ ì½ì„ 수 있는 형태로 ì¶œë ¥í• ìˆ˜ 있다. ì‚¬ìš©ë²•ì€ **cubrid dumplocale -h**\ 로 ì¶œë ¥í• ìˆ˜ 있다. :: cubrid dumplocale [options] [language-string] options ::= -i|--input-file <shared_lib> -d|--calendar -n|--numeric {-a |--alphabet=}{l|lower|u|upper|both} -c|--codepoint-order -w|--weight-order {-s|--start-value} <starting_codepoint> {-e|--end-value} <ending_codepoint> -k -z language-string ::= de_DE | es_ES | fr_FR | it_IT | ja_JP | km_KH | ko_KR | tr_TR | vi_VN | zh_CN | ro_RO * **dumplocale**: 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ì— ì„¤ì •ëœ ë‚´ìš©ì„ í…스트로 ì¶œë ¥í•˜ëŠ” ëª…ë ¹ì´ë‹¤. * *language-string*: de_DE, es_ES, fr_FR, it_IT, ja_JP, km_KH, ko_KR, tr_TR, vi_VN, zh_CN, ro_RO 중 í•˜ë‚˜ì˜ ê°’. 로캘 ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ë¤í”„í• ë¡œìº˜ 언어를 ì§€ì •í•œë‹¤. *language-string*\ ì´ ìƒëžµë˜ë©´ **cubrid_locales.txt** 파ì¼ì— ëª…ì‹œëœ ëª¨ë“ ì–¸ì–´ê°€ 주어진다. 다ìŒì€ **cubrid dumplocale**\ ì— ëŒ€í•œ [options]ì´ë‹¤. .. program:: dumplocale .. option:: -i, --input-file=FILE 로캘 ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ íŒŒì¼ ì´ë¦„ì„ ì§€ì •í•˜ë©°, 경로를 í¬í•¨í•œë‹¤. .. option:: -d, --calendar 캘린ë”와 ë‚ ì§œ/시간 ì •ë³´ë¥¼ 추가로 ë¤í”„한다. .. option:: -n, --numeric ìˆ«ìž ì •ë³´ë¥¼ ë¤í”„한다. .. option:: -a, --alphabet=l | lower | u | upper | both 알파벳과 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ì •ë³´ë¥¼ ë¤í”„한다. .. option:: --identifier-alphabet=l | lower | u | upper ì‹ë³„ìžì— 대한 알파벳과 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ì •ë³´ë¥¼ 추가로 ë¤í”„한다. .. option:: -c, --codepoint-order 코드í¬ì¸íЏ ê°’ì„ ê¸°ë°˜ìœ¼ë¡œ ì •ë ¬í•œ ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ 추가로 ë¤í”„한다. ì¶œë ¥ë˜ëŠ” ì •ë³´ëŠ” cp, char, weight, next-cp, char, weightì´ë‹¤. .. option:: -w, --weight-order 가중치 ê°’ì„ ê¸°ë°˜ìœ¼ë¡œ ì •ë ¬í•œ ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ 추가로 ë¤í”„한다. ì¶œë ¥ë˜ëŠ” ì •ë³´ëŠ” weight, cp, charì´ë‹¤. .. option:: -s, --start-value=CODEPOINT ë¤í”„ ë²”ìœ„ì˜ ì‹œìž‘ì„ ì§€ì •í•œë‹¤. **-a** , **\-\-identifier-alphabet** , **-c**, **-w** ì˜µì…˜ë“¤ì— ëŒ€í•œ 시작 코드í¬ì¸íЏì´ë©°, ê¸°ë³¸ê°’ì€ 0ì´ë‹¤. .. option:: -e, --end-value=CODEPOINT ë¤í”„ ë²”ìœ„ì˜ ëì„ ì§€ì •í•œë‹¤. **-a**, **\-\-identifier-alphabet**, **-c**, **-w** ì˜µì…˜ë“¤ì— ëŒ€í•œ ë 코드í¬ì¸íЏì´ë©°, ê¸°ë³¸ê°’ì€ ë¡œìº˜ ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 ì½ì€ 최대값ì´ë‹¤. .. option:: -k, --console-conversion 콘솔 변환 ë°ì´í„°ë¥¼ 추가로 ë¤í”„한다. .. option:: -z, --normalization ì •ê·œí™” ë°ì´í„°ë¥¼ 추가로 ë¤í”„한다. 다ìŒì€ ìº˜ë¦°ë” ì •ë³´, ìˆ«ìž í‘œê¸° ì •ë³´, 알파벳 ë° ëŒ€ì†Œë¬¸ìž ì •ë³´, ì‹ë³„ìžì— 대한 알파벳 ë° ëŒ€ì†Œë¬¸ìž ì •ë³´, 코드í¬ì¸íЏ ìˆœì„œì— ê¸°ë°˜í•œ ì½œë ˆì´ì…˜ì˜ ì •ë ¬, ê°€ì¤‘ì¹˜ì— ê¸°ë°˜í•œ ì½œë ˆì´ì…˜ì˜ ì •ë ¬, ë°ì´í„°ë¥¼ ì •ê·œí™”í•˜ì—¬ ko_KR ë¡œìº˜ì˜ ë‚´ìš©ì„ ko_KR_dump.txtë¼ëŠ” 파ì¼ì— ë¤í”„하는 예ì´ë‹¤. :: % cubrid dumplocale -d -n -a both -c -w -z ko_KR > ko_KR_dump.txt 여러 ê°œì˜ ì˜µì…˜ì„ ì„¤ì •í•˜ë©´ ì¶œë ¥ë˜ëŠ” ë‚´ìš©ì´ ë§¤ìš° ë§Žì„ ìˆ˜ 있으므로, 파ì¼ë¡œ 리다ì´ë ‰ì…˜í•˜ì—¬ ì €ìž¥í• ê²ƒì„ ê¶Œìž¥í•œë‹¤. 6단계: CUBRID ê´€ë ¨ 프로세스 시작 -------------------------------- ëª¨ë“ CUBRID ê´€ë ¨ 프로세스는 ê°™ì€ í™˜ê²½ ì„¤ì •ì„ í†µí•´ 구ë™ë˜ì–´ì•¼ 한다. CUBRID 서버, 브로커, CAS, CSQL ë“±ì€ ê°™ì€ ë²„ì „ì˜ ë¡œìº˜ ë°”ì´ë„ˆë¦¬ 파ì¼ì„ 사용해야 한다. CUBRID HA 구성 시ì—ë„ ë§ˆì°¬ê°€ì§€ì´ë‹¤. 예를 들어, CUBRID HA 구성ì—서 마스터 서버, ìŠ¬ë ˆì´ë¸Œ 서버와 ë ˆí”Œë¦¬ì¹´ 서버 ë“±ì€ í™˜ê²½ ì„¤ì •ì´ ëª¨ë‘ ê°™ì•„ì•¼ 한다. 서버 프로세스와 CAS í”„ë¡œì„¸ìŠ¤ì— ì˜í•´ 사용ë˜ëŠ” ë¡œìº˜ì˜ í˜¸í™˜ì„± 여부를 ì‹œìŠ¤í…œì´ ìžë™ìœ¼ë¡œ 검사하지 않기 때문ì—, ë‘ í”„ë¡œì„¸ìŠ¤ ê°„ì— LDML 파ì¼ë“¤ì´ 똑같다는 ê²ƒì„ ë³´ìž¥í•´ì•¼ 한다. 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ ë¡œë”©ì€ CUBRID 구ë™ì˜ 첫 단계로서, êµ¬ë™ ì‹œì— ë°ì´í„°ë² ì´ìФ 구조를 초기화하기 위해 로캘 ì •ë³´ë¥¼ 요구하는 서버, CAS, CSQL, createdb, copydb, unloaddb, loaddb 프로세스 ë“±ì€ êµ¬ë™ ì‹œì ì— ë¡œìº˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 로딩한다. 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ 로딩 ì ˆì°¨ëŠ” 다ìŒê³¼ 같다. * ë¼ì´ë¸ŒëŸ¬ë¦¬ 경로가 ì œê³µë˜ì§€ 않으면 $CUBRID/lib/libcubrid_<*lang_name*>.so 파ì¼ì˜ ë¡œë”©ì„ ì‹œë„한다. ì´ íŒŒì¼ì´ 발견ë˜ì§€ 않으면 í•˜ë‚˜ì˜ íŒŒì¼ **$CUBRID/lib/libcubrid_all_locales.so**\ ì—서 ëª¨ë“ ë¡œìº˜ì´ ë°œê²¬ëœë‹¤ê³ 간주한다. * 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 발견ë˜ì§€ 않거나 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 로딩하는 ë™ì•ˆ 오류가 ë°œìƒí•˜ë©´ CUBRID 프로세스 구ë™ì´ 종료ëœë‹¤. * ë°ì´í„°ë² ì´ìŠ¤ì™€ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ ê°„ ì½œë ˆì´ì…˜ ì •ë³´ê°€ 다르면 CUBRID 프로세스가 구ë™ë˜ì§€ 않는다. 기존 ë°ì´í„°ë² ì´ìŠ¤ì— ë¡œìº˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ ë³€ê²½ëœ ì½œë ˆì´ì…˜ì„ í¬í•¨í•˜ë ¤ë©´, ë¨¼ì € **cubrid synccolldb** ëª…ë ¹ì„ ìˆ˜í–‰í•˜ì—¬ ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì„ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ì— 맞게 ë™ê¸°í™”한다. 다ìŒìœ¼ë¡œ, 스키마와 ë°ì´í„°ë¥¼ ì›í•˜ëŠ” ì½œë ˆì´ì…˜ì— 맞게 기존 ë°ì´í„°ë² ì´ìŠ¤ì— ì—…ë°ì´íŠ¸í•´ì•¼ 한다. ìžì„¸í•œ ë‚´ìš©ì€ :ref:`synccolldb`\ 를 ì°¸ê³ í•œë‹¤. .. _synccolldb: ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì„ 시스템 ì½œë ˆì´ì…˜ì— ë™ê¸°í™” ------------------------------------------------ CUBRIDê°€ ì •ìƒì 으로 ë™ìž‘하기 위해서는 시스템 ì½œë ˆì´ì…˜ê³¼ ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì´ 같아야 한다. 시스템 ë¡œìº˜ì€ ë‚´ìž¥ëœ ë¡œìº˜ê³¼ cubrid_locales.txt 파ì¼ì„ 통해(:ref:`locale-setting` ì°¸ê³ ) ìƒì„±í•œ ë¼ì´ë¸ŒëŸ¬ë¦¬ ë¡œìº˜ì„ í¬í•¨í•œ ë¡œìº˜ì„ ì˜ë¯¸í•˜ë©°, 시스템 ë¡œìº˜ì€ ì‹œìŠ¤í…œ ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ í¬í•¨í•œë‹¤. ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ ì •ë³´ëŠ” **_db_collation** 시스템 카탈로그 í…Œì´ë¸”ì— ì €ìž¥ëœë‹¤. **cubrid synccolldb** ìœ í‹¸ë¦¬í‹°ëŠ” ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì´ 시스템 ì½œë ˆì´ì…˜ê³¼ ì¼ì¹˜í•˜ëŠ”ì§€ 확ì¸í•˜ê³ , 다를 경우 ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì„ 시스템 ì½œë ˆì´ì…˜ì— ë™ê¸°í™”하는 ìœ í‹¸ë¦¬í‹°ì´ë‹¤. 하지만, ì´ ìœ í‹¸ë¦¬í‹°ëŠ” ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ì €ìž¥ëœ ë°ì´í„° ìžì²´ë¥¼ 변환하지 않ìŒì„ ì¸ì§€í•´ì•¼ 한다. ì´ ìœ í‹¸ë¦¬í‹°ëŠ” 시스템 ë¡œìº˜ì´ ë³€ê²½ëœ ì´í›„ ê¸°ì¡´ì˜ ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ 변경해야 í• ë•Œ ì‚¬ìš©í• ìˆ˜ 있다. 단, 사용ìžê°€ ì§ì ‘ 수ë™ìœ¼ë¡œ 진행해야 하는 ìž‘ì—…ë“¤ì´ ìžˆë‹¤. ë™ê¸°í™”하기 ì „ì— ë‹¤ìŒê³¼ ê°™ì€ ìž‘ì—…ì„ ìˆ˜í–‰í•œë‹¤. **cubrid synccolldb -c** ëª…ë ¹ì„ ìˆ˜í–‰í•˜ì—¬ ìƒì„±ë˜ëŠ” cubrid_synccolldb_<*database_name*>.sql 파ì¼ì„ CSQLì„ í†µí•´ 실행하면 ëœë‹¤. * ALTER TABLE MODIFY ë¬¸ì„ ì‚¬ìš©í•˜ì—¬ ì½œë ˆì´ì…˜ì„ ìˆ˜ì •í•œë‹¤. * ì½œë ˆì´ì…˜ì„ í¬í•¨í•˜ëŠ” ë·°, ì¸ë±ìФ, 트리거, ë¶„í• (partition) ë“±ì„ ëª¨ë‘ ì œê±°í•œë‹¤. **cubrid synccolldb**\ 를 ê°€ì§€ê³ ë™ê¸°í™”를 수행한다. ê·¸ë¦¬ê³ ì•„ëž˜ ìž‘ì—…ì„ ìˆ˜í–‰í•œë‹¤. * ë·°, ì¸ë±ìФ, 트리거, ë¶„í• ë“±ì„ ìž¬ìƒì„±í•œë‹¤. * 새로운 ì½œë ˆì´ì…˜ì— 맞게 ì‘ìš© í”„ë¡œê·¸ëž¨ì˜ ì§ˆì˜ë¬¸ë“¤ì„ ì—…ë°ì´íŠ¸í•œë‹¤. ì´ ìœ í‹¸ë¦¬í‹°ëŠ” ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì •ì§€í•œ ìƒíƒœì—서 수행해야 한다. **synccolldb** êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: cubrid synccolldb [options] database_name * **cubrid**: CUBRID 서비스 ë° ë°ì´í„°ë² ì´ìФ 관리를 위한 통합 ìœ í‹¸ë¦¬í‹°ì´ë‹¤. * **synccolldb**: ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì„ 시스템 ì½œë ˆì´ì…˜(로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 내용과 $CUBRID/conf/cubrid_locales.txt 파ì¼ì„ 따름)으로 ë™ê¸°í™”하는 ëª…ë ¹ì´ë‹¤. * *database_name*: ì½œë ˆì´ì…˜ ì •ë³´ê°€ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ ì½œë ˆì´ì…˜ì— 맞게 ë™ê¸°í™”ë ë°ì´í„°ë² ì´ìŠ¤ì˜ ì´ë¦„ì´ë‹¤. [options]를 ìƒëžµí•˜ë©´ 시스템과 ë°ì´í„°ë² ì´ìФ ê°„ ì½œë ˆì´ì…˜ ì°¨ì´ë¥¼ ì¶œë ¥í•˜ê³ , ë™ê¸°í™”하기 ì „ì— ì‚ì œë˜ì–´ì•¼ í• ê°ì²´ 질ì˜ë¬¸ì„ í¬í•¨í•˜ëŠ” cubrid_synccolldb_<*database_name*>.sql 파ì¼ì„ ìƒì„±í•œë‹¤. 다ìŒì€ **cubrid synccolldb**\ ì—서 사용하는 [options]ì´ë‹¤. .. program:: synccolldb .. option:: -c, --check-only ë°ì´í„°ë² ì´ìŠ¤ì˜ ì½œë ˆì´ì…˜ê³¼ ì‹œìŠ¤í…œì˜ ì½œë ˆì´ì…˜ì„ 확ì¸í•˜ì—¬ 불ì¼ì¹˜í•˜ëŠ” ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ ì¶œë ¥í•œë‹¤. .. option:: -f, --force-only ë°ì´í„°ë² ì´ìŠ¤ì— ìžˆëŠ” ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ 시스템ì—서 ì„¤ì •í•œ ì½œë ˆì´ì…˜ê³¼ ë™ì¼í•˜ê²Œ ì—…ë°ì´íŠ¸í• ë•Œ ì—…ë°ì´íЏ 여부를 질문하지 않는다. 다ìŒì˜ 예는 시스템 ì½œë ˆì´ì…˜ê³¼ ë°ì´í„°ë² ì´ìŠ¤ì˜ ì½œë ˆì´ì…˜ì´ 서로 다를 때 어떻게 ë™ìž‘하는지를 보여준다. ë¨¼ì € ko_KR ë¡œìº˜ì— ëŒ€í•œ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ìƒì„±í•œë‹¤. :: $ echo ko_KR > $CUBRID/conf/cubrid_locales.txt $ make_locale.sh -t 64 다ìŒìœ¼ë¡œ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ìƒì„±í•œë‹¤. :: $ cubrid createdb --db-volume-size=20M --log-volume-size=20M xdb en_US 스키마를 ìƒì„±í•œë‹¤. ì´ë•Œ, ê° í…Œì´ë¸”ì— ì›í•˜ëŠ” ì½œë ˆì´ì…˜ì„ ì§€ì •í•œë‹¤. :: $ csql -S -u dba xdb -i in.sql .. code-block:: sql CREATE TABLE dept (depname STRING PRIMARY KEY) COLLATE utf8_ko_cs_uca; CREATE TABLE emp (eid INT PRIMARY KEY, depname STRING, address STRING) COLLATE utf8_ko_cs_uca; ALTER TABLE emp ADD CONSTRAINT FOREIGN KEY (depname) REFERENCES dept(depname); ì‹œìŠ¤í…œì˜ ë¡œìº˜ ì„¤ì •ì„ ë³€ê²½í•œë‹¤. **cubrid_locales.txt**\ì— ì•„ë¬´ëŸ° ê°’ë„ ì„¤ì •í•˜ì§€ 않으면 ë°ì´í„°ë² ì´ìФì—는 ë‚´ìž¥ëœ ë¡œìº˜ë§Œ 존재하는 것으로 간주한다. :: $ echo "" > $CUBRID/conf/cubrid_locales.txt **cubrid synccolldb -c** ëª…ë ¹ì„ ìˆ˜í–‰í•˜ì—¬ 시스템과 ë°ì´í„°ë² ì´ìФ ê°„ ì½œë ˆì´ì…˜ ì°¨ì´ë¥¼ 확ì¸í•œë‹¤. :: $ cubrid synccolldb -c xdb ---------------------------------------- ---------------------------------------- Collation 'utf8_ko_cs_uca' (Id: 133) not found in database or changed in new system configuration. ---------------------------------------- ---------------------------------------- Collation 'utf8_gen_ci' (Id: 44) not found in database or changed in new system configuration. ---------------------------------------- ---------------------------------------- Collation 'utf8_gen_ai_ci' (Id: 37) not found in database or changed in new system configuration. ---------------------------------------- ---------------------------------------- Collation 'utf8_gen' (Id: 32) not found in database or changed in new system configuration. ---------------------------------------- ---------------------------------------- There are 4 collations in database which are not configured or are changed compared to system collations. Synchronization of system collation into database is required. Run 'cubrid synccolldb -f xdb' ì¸ë±ìŠ¤ê°€ 존재한다면 ë¨¼ì € ì¸ë±ìŠ¤ë¥¼ ì œê±°í•œ 후 ê° í…Œì´ë¸”ì˜ ì½œë ˆì´ì…˜ì„ ë³€í™˜í•˜ê³ , ì´í›„ ì¸ë±ìФ ìƒì„±ì„ ì§ì ‘ 수행해야 한다. ì¸ë±ìŠ¤ë¥¼ ì œê±°í•˜ê³ í…Œì´ë¸”ì˜ ì½œë ˆì´ì…˜ì„ 변환하는 ê³¼ì •ì€ **synccolldb**\ ì—서 ìƒì„±ëœ cubrid_synccolldb_xdb.sql 파ì¼ë¡œ ìˆ˜í–‰í• ìˆ˜ 있다. ë‹¤ìŒ ì˜ˆì—서는 외래 키가 재ìƒì„±í•´ì•¼ ë ì¸ë±ìŠ¤ì— í•´ë‹¹í•œë‹¤. :: $ cat cubrid_synccolldb_xdb.sql ALTER TABLE [dept] COLLATE utf8_bin; ALTER TABLE [emp] COLLATE utf8_bin; ALTER TABLE [emp] DROP FOREIGN KEY [fk_emp_depname]; ALTER TABLE [dept] MODIFY [depname] VARCHAR(1073741823) COLLATE utf8_bin; ALTER TABLE [emp] MODIFY [address] VARCHAR(1073741823) COLLATE utf8_bin; ALTER TABLE [emp] MODIFY [depname] VARCHAR(1073741823) COLLATE utf8_bin; $ csql -S -u dba -i cubrid_synccolldb_xdb.sql xdb 시스템 ì½œë ˆì´ì…˜ì„ ë°ì´í„°ë² ì´ìŠ¤ì— ë™ê¸°í™”하기 ì „ì— ìœ„ì˜ cubrid_synccolldb_xdb.sql 스í¬ë¦½íЏ 파ì¼ì„ 실행하여 ì˜ˆì „ì˜ ì½œë ˆì´ì…˜ë“¤ì„ ì‚ì œí•´ì•¼ 한다. **cubrid synccolldb** ëª…ë ¹ì„ ìˆ˜í–‰í•œë‹¤. ì˜µì…˜ì„ ìƒëžµí•˜ë©´ 해당 ëª…ë ¹ì„ ìˆ˜í–‰í• ê²ƒì¸ì§€ë¥¼ 확ì¸í•˜ëŠ” 메시지가 나타나며, **-f** ì˜µì…˜ì„ ì£¼ë©´ í™•ì¸ ê³¼ì • ì—†ì´ ë°ì´í„°ë² ì´ìŠ¤ì™€ 시스템 ê°„ ì½œë ˆì´ì…˜ ë™ê¸°í™”를 수행한다. :: $ cubrid synccolldb xdb Updating system collations may cause corruption of database. Continue (y/n) ? Contents of '_db_collation' system table was updated with new system collations. DROPëœ ì™¸ëž˜ 키를 다시 ìƒì„±í•œë‹¤. :: $ csql -S -u dba xdb ALTER TABLE emp ADD CONSTRAINT FOREIGN KEY fk_emp_depname(depname) REFERENCES dept(depname); .. note:: CUBRIDì—서 ì½œë ˆì´ì…˜ì€ CUBRID ì„œë²„ì— ì˜í•´ ìˆ«ìž ID로 ì¸ì‹ë˜ë©°, IDì˜ ë²”ìœ„ëŠ” 0부터 255까지ì´ë‹¤. LDML 파ì¼ì€ ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¡œ 컴파ì¼ë˜ëŠ”ë°, ì½œë ˆì´ì…˜ ID와 ì½œë ˆì´ì…˜(ì´ë¦„, ì†ì„±)ì˜ ë§¤í•‘ ì •ë³´ë¥¼ ì œê³µí•œë‹¤. * 시스템 ì½œë ˆì´ì…˜ì€ CUBRID 서버와 CAS ëª¨ë“ˆì— ì˜í•´ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¡œë¶€í„° 로딩ë˜ëŠ” ì½œë ˆì´ì…˜ì´ë‹¤. * ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ì€ **_db_collation** 시스템 í…Œì´ë¸”ì— ì €ìž¥ë˜ëŠ” ì½œë ˆì´ì…˜ì´ë‹¤. .. _collation: ì½œë ˆì´ì…˜ ì„¤ì • ============= ì½œë ˆì´ì…˜(collation)ì´ëž€ 문ìžì—´ ë¹„êµ ë° ì •ë ¬ ê·œì¹™ì˜ ì§‘í•©ì´ë‹¤. ì½œë ˆì´ì…˜ì˜ ì „í˜•ì ì¸ ì˜ˆëŠ” 알파벳 ìˆœì„œì˜ ì •ë ¬(alphabetization)ì´ë‹¤. í…Œì´ë¸” ìƒì„± ì‹œì— ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ 명시ë˜ì§€ 않으면, ì¹¼ëŸ¼ì€ í…Œì´ë¸”ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ 따른다. 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ ì„¤ì •ì€ ê¸°ë³¸ì 으로 í´ë¼ì´ì–¸íŠ¸ì˜ ì„¤ì •ì„ ë”°ë¥¸ë‹¤. í‘œí˜„ì‹ ê²°ê³¼ê°€ 문ìžì—´ ë°ì´í„°ì´ë©´ 표현ì‹ì˜ 피연산ìžë¥¼ ê°ì•ˆí•œ ì½œë ˆì´ì…˜ ì¶”ë¡ ê³¼ì •ì„ í†µí•˜ì—¬ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ ê²°ì •í•œë‹¤. .. note:: CUBRID는 ìœ ëŸ½ê³¼ 아시아 언어를 í¬í•¨í•œ 여러 가지 ì–¸ì–´ë“¤ì˜ ì½œë ˆì´ì…˜ì„ ì§€ì›í•œë‹¤. ì´ëŸ¬í•œ ì–¸ì–´ë“¤ì€ ë‹¤ë¥¸ ì•ŒíŒŒë²³ë“¤ì„ ì‚¬ìš©í• ë¿ë§Œ 아니ë¼, íŠ¹ì • ì–¸ì–´ë“¤ì€ ì¼ë¶€ 문ìžì…‹ì— 대해 확장(expansion) ë˜ëŠ” 축약(contraction) ì •ì˜ë¥¼ 필요로 한다. ì´ëŸ¬í•œ 사í•ë“¤ì˜ ëŒ€ë¶€ë¶„ì€ The Unicode Consortiumì— ì˜í•´ ìœ ë‹ˆì½”ë“œ 표준(2012ë…„ 현재 ë²„ì „ 6.1.0)으로 ì œì •ë˜ì–´ 있으며, ëŒ€ë¶€ë¶„ì˜ ì–¸ì–´ê°€ 요구하는 ëª¨ë“ ë¬¸ìž ì •ë³´ëŠ” DUCET 파ì¼(`http://www.unicode.org/Public/UCA/latest/allkeys.txt <http://www.unicode.org/Public/UCA/latest/allkeys.txt>`_)ì— ì €ìž¥ë˜ì–´ 있다. ì´ëŸ¬í•œ DUCETì— í‘œí˜„ëœ ëŒ€ë¶€ë¶„ì˜ ì½”ë“œí¬ì¸íŠ¸ëŠ” 0~FFFF ë‚´ì˜ ë²”ìœ„ì— í¬í•¨ë˜ì§€ë§Œ, ì´ ë²”ìœ„ë¥¼ 넘는 코드í¬ì¸íŠ¸ë„ ì¡´ìž¬í•œë‹¤. 하지만 CUBRID는 0~FFFF ë‚´ì˜ ì½”ë“œí¬ì¸íŠ¸ë§Œ ì‚¬ìš©í•˜ê³ , ë‚˜ë¨¸ì§€ë“¤ì€ ë¬´ì‹œí•œë‹¤(하위 부분만 사용하ë„ë¡ ì„¤ì •í• ìˆ˜ë„ ìžˆë‹¤). DUCETì— ìžˆëŠ” ê°ê°ì˜ 코드í¬ì¸íŠ¸ëŠ” 하나 ë˜ëŠ” ê·¸ ì´ìƒì˜ ì½œë ˆì´ì…˜ ì›ì†Œ(element)를 ê°€ì§€ê³ ìžˆë‹¤. í•˜ë‚˜ì˜ ì½œë ˆì´ì…˜ ì›ì†ŒëŠ” 네 ê°œ ìˆ«ìž ê°’ì˜ ì§‘í•©ìœ¼ë¡œ, ë¬¸ìž ë¹„êµì˜ 네 가지 수준(level)ì„ ê°€ì¤‘ì¹˜(weight)로 표현한다. ê°ê°ì˜ 가중치 ê°’ì€ 0~FFFFì˜ ë²”ìœ„ë¥¼ 가진다. DUCETì—서 한 문ìžëŠ” í•˜ë‚˜ì˜ ë¼ì¸ìœ¼ë¡œ 다ìŒê³¼ ê°™ì´ í‘œí˜„ëœë‹¤. :: < codepoint_or_multiple_codepoints > ; [.W1.W2.W3.W4][....].... # < readable text explanation of the symbol/character > 한êµì–´ ë¬¸ìž ê¸°ì—ì€ ë‹¤ìŒê³¼ ê°™ì´ í‘œí˜„ëœë‹¤. :: 1100 ; [.313B.0020.0002.1100] # HANGUL CHOSEONG KIYEOK ìœ„ì˜ ì˜ˆì—서 1100ì€ ì½”ë“œí¬ì¸íЏ, [.313B.0020.0002.1100]ì€ í•˜ë‚˜ì˜ ì½œë ˆì´ì…˜ ì›ì†Œì´ë©°, 313B는 Level 1, 0020ì€ Level 2, 0002는 Level 3, 1100ì€ Level 4ì˜ ê°€ì¤‘ì¹˜ì´ë‹¤. ì–¸ì–´ì˜ ê¸°ëŠ¥ì ì†ì„±ìœ¼ë¡œ ì •ì˜ë˜ëŠ” 확장 ì§€ì›ì€ í•˜ë‚˜ì˜ ê²°í•© 문ìžë¥¼ ê·¸ê²ƒì„ ë§Œë“œëŠ” 한 ìŒì˜ 문ìžë“¤ë¡œ í•´ì„하ë„ë¡ ì§€ì›í•œë‹¤ëŠ” ê²ƒì„ ì˜ë¯¸í•œë‹¤. 예를 들어, 한 ë¬¸ìž 'æ' ì„ ë‘ ê°œì˜ ë¬¸ìž 'ae'와 ê°™ì€ ë¬¸ìžë¡œ í•´ì„한다. DUCETì—서 í™•ìž¥ì€ í•˜ë‚˜ì˜ ì½”ë“œí¬ì¸íŠ¸ë‚˜ ì¶•ì•½ì— ëŒ€í•´ 하나 ì´ìƒì˜ ì½œë ˆì´ì…˜ ì›ì†Œë“¤ë¡œ 표현ëœë‹¤. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì„ 다루는 ê²ƒì€ ë‘ ê°œì˜ ë¬¸ìžì—´ì„ 비êµí• 때 ì½œë ˆì´ì…˜ì˜ 세기/수준까지 여러 번 비êµí•˜ëŠ” ë¹„ìš©ì„ ê°ìˆ˜í•´ì•¼ 하기 때문ì—, CUBRID는 기본ì 으로는 í™•ìž¥ì„ ì§€ì›í•˜ì§€ 않ë„ë¡ ì„¤ì •ë˜ì–´ 있다. .. _collation-charset-column: ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ ------------------------ ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì€ 문ìžì—´ ë°ì´í„° 타입(**VARCHAR**, **CHAR**)ê³¼ **ENUM** íƒ€ìž…ì— ì ìš©ëœë‹¤. 기본ì 으로 ëª¨ë“ ë¬¸ìžì—´ ë°ì´í„° íƒ€ìž…ì€ ë°ì´í„°ë² ì´ìŠ¤ì˜ ê¸°ë³¸ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ 따르는ë°, ì´ë¥¼ 변경하여 ì§€ì •í• ìˆ˜ 있는 ë°©ë²•ì„ ì œê³µí•œë‹¤. 문ìžì…‹ ^^^^^^ 문ìžì…‹ì€ 문ìžì—´ 리터럴ì´ë‚˜ 따옴표 없는 ì‹ë³„ìž(identifier)로 명시ë 수 있으며, ì§€ì›í•˜ëŠ” 문ìžì…‹ì€ 다ìŒê³¼ 같다. * ISO-8859-1 * UTF-8 (문ìžë‹¹ 최대 4 ë°”ì´íЏ 길ì´, 즉 0~0x10FFFF 범위 ë‚´ì˜ ì½”ë“œí¬ì¸íŠ¸ë¥¼ ì§€ì›) * EUC-KR (ì´ ë¬¸ìžì…‹ì€ 하위 í˜¸í™˜ì„ ìœ„í•´ì„œ ì¡´ìž¬í• ë¿ ì‚¬ìš©ì„ ê¶Œìž¥í•˜ì§€ 않는다.) .. note:: CUBRID 9.0 미만 ë²„ì „ê¹Œì§€ëŠ” ISO-8859-1 문ìžì…‹ì´ ì„¤ì •ë˜ë©´ EUC-KR 문ìžë“¤ì„ ì‚¬ìš©í• ìˆ˜ 있ë„ë¡ ì§€ì›í–ˆì§€ë§Œ, ì´í›„ ë²„ì „ë¶€í„°ëŠ” ì´ë¥¼ ì§€ì›í•˜ì§€ 않는다. EUC-KR 문ìžë“¤ì€ ì˜¤ì§ EUC-KR 문ìžì…‹ì—서만 사용ë 수 있다. 문ìžì—´ 검사 ^^^^^^^^^^^ 기본ì 으로 ëª¨ë“ ìž…ë ¥ ë°ì´í„°ëŠ” DB ìƒì„± 시 ì„¤ì •í•œ 문ìžë¡œ 간주한다. 하지만 **SET NAMES** 문ì´ë‚˜ 문ìžì…‹ 소개ìž(ë˜ëŠ” **COLLATE** 문ìžì—´ ìˆ˜ì •ìž)ê°€ DB ìƒì„± 시 ì„¤ì •í•œ 로캘보다 ìš°ì„ í•œë‹¤(:ref:`collation-charset-string` ì°¸ê³ ). 서버 문ìžì…‹ì´ UTF-8ì¸ë° UTF-8 ë°”ì´íЏ 순서(byte sequence)ì— ë§žì§€ 않는 ë°ì´í„°ì™€ ê°™ì´ ë¬´íš¨í•œ ë°ì´í„°ì— 대해 문ìžì—´ì„ 검사하지 않으면 ì •ì˜ë˜ì§€ ì•Šì€ ë™ìž‘ì„ ë³´ì´ê±°ë‚˜ 심지어 서버가 ë¹„ì •ìƒ ì¢…ë£Œ(crash)ë 수 있다. 기본ì 으로는 문ìžì—´ì„ 검사하지 않ë„ë¡ ì„¤ì •ë˜ì–´ 있다. 문ìžì—´ì„ ê²€ì‚¬í•˜ë ¤ë©´ **intl_check_input_string** 시스템 파ë¼ë¯¸í„°ì˜ ê°’ì„ yes로 ì„¤ì •í•œë‹¤(기본값: no). 하지만 ìœ íš¨í•œ ë°ì´í„°ë§Œ ìž…ë ¥ëœë‹¤ê³ ë³´ìž¥í• ìˆ˜ 있다면, 문ìžì—´ 검사는 하지 않는 ê²ƒì´ ì„±ëŠ¥ìƒ ë” ìœ ë¦¬í•˜ë‹¤. **intl_check_input_string** 시스템 파ë¼ë¯¸í„°ì˜ ê°’ì´ yesì¸ ê²½ìš°, UTF-8ê³¼ EUC-KR 문ìžì…‹ì— 대해서만 ìœ íš¨í•œ ë°ì´í„° ì¸ì½”딩ì¸ì§€ 검사한다. ISO-8859-1 문ìžì…‹ì€ 한 ë°”ì´íЏ ì¸ì½”딩ì´ë¯€ë¡œ ëª¨ë“ ë°”ì´íЏ ê°’ì´ ìœ íš¨í•˜ê¸° ë•Œë¬¸ì— ê²€ì‚¬í•˜ì§€ 않는다. 문ìžì…‹ 변환 ^^^^^^^^^^^ ì½œë ˆì´ì…˜/문ìžì…‹ ìˆ˜ì •ìž(**COLLATE** / **CHARSET**) ë˜ëŠ” ì½œë ˆì´ì…˜ ì¶”ë¡ ê³¼ì •ì— ì˜í•´ì„œ 문ìžì…‹ ë³€í™˜ì´ ì¼ì–´ë‚ 수 있는ë°, ì´ëŸ¬í•œ 문ìžì…‹ ë³€í™˜ì€ ë¹„ê°€ì—ì (irreversible)ì´ë‹¤. ì¼ë°˜ì 으로, 문ìžì…‹ ë³€í™˜ì€ ë¬¸ìž íŠ¸ëžœìŠ¤ì½”ë”©(transcoding)ì´ë‹¤(ì–´ë–¤ 문ìžì…‹ì— 있는 문ìžë¥¼ 표현하는 ë°”ì´íЏ ê°’ì´ ëŒ€ìƒ ë¬¸ìžì…‹ì—서 ê°™ì€ ë¬¸ìžë¥¼ 나타내지만 다른 ë°”ì´íЏ 값으로 대체ëœë‹¤). ì–´ë–¤ 변환ì´ë“ , ì†ì‹¤ì´ ë°œìƒí• 수 있다. ì›ë³¸ 문ìžì…‹ì— 있는 문ìžë¥¼ ëŒ€ìƒ ë¬¸ìžì…‹ìœ¼ë¡œ ì¸ì½”ë”©í• ìˆ˜ 없으면 '?' 문ìžë¡œ 대체ëœë‹¤. ë°”ì´ë„ˆë¦¬ 문ìžì…‹ì„ 다른 문ìžì…‹ìœ¼ë¡œ ë³€í™˜í• ë•Œë„ ë§ˆì°¬ê°€ì§€ì´ë‹¤. 가장 ë§Žì€ ë¬¸ìžë¥¼ ì§€ì›í•˜ëŠ” 문ìžì…‹ì€ UTF-8ì´ë©° ìœ ë‹ˆì½”ë“œë¥¼ ì¸ì½”딩하므로 ëª¨ë“ ë¬¸ìžê°€ ì¸ì½”딩ë 수 있다. 그러나 ISO-8859-1ì—서 UTF-8로 변환하면 ì¼ë¶€ "ì†ì‹¤"ì´ ë°œìƒí• 수 ë„ ìžˆë‹¤. 예를 들어 80-A0 ë²”ìœ„ì˜ ë°”ì´íЏ ê°’ì€ ISO-8859-1 문ìžì—서 ìœ íš¨í•œ ê°’ì€ ì•„ë‹ˆì§€ë§Œ 문ìžì—´ì— ë‚˜íƒ€ë‚ ìˆ˜ë„ ìžˆë‹¤. ì´ ë¬¸ìžë“¤ì„ UTF-8로 변환하면 '?'로 대체ëœë‹¤. 한 문ìžì—서 다른 문ìžë¡œ 변환ë˜ëŠ” ê·œì¹™ì€ ë‹¤ìŒê³¼ 같다. +------------------------+-----------------------------------+-----------------------------------+-------------------------------+-------------------------------+ | Source \\ Destination | Binary | ISO-8859-1 | UTF-8 | EUC-KR | +========================+===================================+===================================+===============================+===============================+ | **Binary** | 변환 ì—†ìŒ | 변환 ì—†ìŒ | 변환 ì—†ìŒ. | 변환 ì—†ìŒ. | | | | | 문ìžë‹¹ ìœ íš¨ì„± ê²€ì¦. | 문ìžë‹¹ ìœ íš¨ì„± ê²€ì¦. | | | | | ìœ íš¨í•˜ì§€ ì•Šì€ ë¬¸ìž '?'로 대체 | ìœ íš¨í•˜ì§€ ì•Šì€ ë¬¸ìž '?'로 대체 | +------------------------+-----------------------------------+-----------------------------------+-------------------------------+-------------------------------+ | **ISO-8859-1** | 변환 ì—†ìŒ | 변환 ì—†ìŒ | ë°”ì´íЏ 변환. | ë°”ì´íЏ 변환. | | | | | ë°”ì´íЏ í¬ê¸°ê°€ ì¦ê°€ë¨. | ë°”ì´íЏ í¬ê¸°ê°€ ì¦ê°€ë¨. | | | | | 사용 가능한 ë¬¸ìž ì†ì‹¤ì€ ì—†ìŒ. | 사용 가능한 ë¬¸ìž ì†ì‹¤ì€ ì—†ìŒ. | +------------------------+-----------------------------------+-----------------------------------+-------------------------------+-------------------------------+ | **UTF-8** | 변환 ì—†ìŒ. | ë°”ì´íЏ 재해ì„. | 변환 ì—†ìŒ | ë°”ì´íЏ 변환. | | | ë°”ì´íЏ í¬ê¸°ëŠ” 변화 ì—†ìŒ. | ë°”ì´íЏ í¬ê¸°ê°€ ê°ì†Œë 수 있ìŒ. | | ë°”ì´íЏ í¬ê¸°ê°€ ê°ì†Œë 수 있ìŒ. | | | ë¬¸ìž ê¸¸ì´ëŠ” ì¦ê°€í•¨. | ë¬¸ìž ì†ì‹¤ì´ 예ìƒë¨. | | ë¬¸ìž ì†ì‹¤ì´ 예ìƒë¨. | +------------------------+-----------------------------------+-----------------------------------+-------------------------------+-------------------------------+ | **EUC-KR** | 변환 ì—†ìŒ. | ë°”ì´íЏ 변환. | ë°”ì´íЏ 변환. | 변환 ì—†ìŒ | | | ë°”ì´íЏ í¬ê¸°ëŠ” 변화 ì—†ìŒ. | ë°”ì´íЏ í¬ê¸°ê°€ ê°ì†Œë 수 있ìŒ. | ë°”ì´íЏ í¬ê¸°ê°€ ì¦ê°€ë 수 있ìŒ. | | | | ë¬¸ìž ê¸¸ì´ëŠ” ì¦ê°€í•¨. | ë¬¸ìž ì†ì‹¤ì´ 예ìƒë¨. | 사용 가능한 ë¬¸ìž ì†ì‹¤ì€ ì—†ìŒ. | | +------------------------+-----------------------------------+-----------------------------------+-------------------------------+-------------------------------+ .. note:: CUBRID 9.x ì´ì „ ë²„ì „ì€ ë°”ì´ë„ˆë¦¬ 문ìžì…‹ì„ ì§€ì›í•˜ì§€ 않았으며, ëŒ€ì‹ ISO-8859-1 문ìžì…‹ì´ 기본 ë°”ì´ë„ˆë¦¬ 문ìžì…‹ ê¸°ëŠ¥ì„ í–ˆë‹¤. UTF-8 ë° EUC-KR 문ìžì…‹ì—서 ISO-8859-1로 변환하는 경우 ë¬¸ìž ë³€í™˜ì´ ì•„ë‹ˆë¼ ì›ë³¸ì˜ 콘í…ì¸ (ë°”ì´íЏ)를 재해ì„하여 ë³€í™˜ì„ ìˆ˜í–‰í•œë‹¤. .. _collation-setting: ì½œë ˆì´ì…˜ ^^^^^^^^ ì½œë ˆì´ì…˜ì€ 문ìžì—´ 리터럴ì´ë‚˜ 따옴표 없는 ì‹ë³„ìžë¡œ 명시ë 수 있다. 다ìŒì€ 내장ëœ(built-in) ì½œë ˆì´ì…˜ì— 대한 **db_collation** 시스템 카탈로그 ë·°ì˜ ì§ˆì˜(SELECT * FROM db_collation WHERE is_builtin='Yes') ê²°ê³¼ì´ë‹¤. :: coll_id coll_name charset_name is_builtin has_expansions contractions uca_strength ================================================================================================ 0 'iso88591_bin' 'iso88591' 'Yes' 'No' 0 'Not applicable' 1 'utf8_bin' 'utf8' 'Yes' 'No' 0 'Not applicable' 2 'iso88591_en_cs' 'iso88591' 'Yes' 'No' 0 'Not applicable' 3 'iso88591_en_ci' 'iso88591' 'Yes' 'No' 0 'Not applicable' 4 'utf8_en_cs' 'utf8' 'Yes' 'No' 0 'Not applicable' 5 'utf8_en_ci' 'utf8' 'Yes' 'No' 0 'Not applicable' 6 'utf8_tr_cs' 'utf8' 'Yes' 'No' 0 'Not applicable' 7 'utf8_ko_cs' 'utf8' 'Yes' 'No' 0 'Not applicable' 8 'euckr_bin' 'euckr' 'Yes' 'No' 0 'Not applicable' 9 'binary' 'binary' 'Yes' 'No' 0 'Not applicable' ë‚´ìž¥ëœ ì½œë ˆì´ì…˜ì€ ì‚¬ìš©ìž ë¡œìº˜ ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 추가 ì—†ì´ ì‚¬ìš© 가능하며, ê° ì½œë ˆì´ì…˜ì€ ê´€ë ¨ 문ìžì…‹ì„ ê°€ì§€ê³ ìžˆê¸° ë•Œë¬¸ì— ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ 호환ë˜ë„ë¡ ì§€ì •í•´ì•¼ 한다. **COLLATE** ìˆ˜ì •ìžê°€ **CHARSET** ìˆ˜ì •ìž ì—†ì´ ëª…ì‹œë˜ë©´, ì½œë ˆì´ì…˜ì˜ 기본 문ìžì…‹ì´ ì„¤ì •ëœë‹¤. **CHARSET** ìˆ˜ì •ìžê°€ **COLLATE** ìˆ˜ì •ìž ì—†ì´ ëª…ì‹œë˜ë©´, 기본(default) ì½œë ˆì´ì…˜ì´ ì„¤ì •ëœë‹¤. 문ìžì…‹ë“¤ì— 대한 기본 ì½œë ˆì´ì…˜ì€ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ìœ¼ë¡œ, 문ìžì…‹ ë° ì´ì— 대ì‘ë˜ëŠ” ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì€ 다ìŒê³¼ 같다. * ISO-8859-1: iso88591_bin * UTF-8: utf8_bin * EUC-KR: euckr_bin * Binary: binary Binary는 ì½œë ˆì´ì…˜ê³¼ ê´€ë ¨ 문ìžì…‹ì˜ ì´ë¦„ì´ë‹¤. 서로 다른 ì½œë ˆì´ì…˜(ê³¼ 문ìžì…‹)ì„ ê°€ì§„ í‘œí˜„ì‹ ì¸ìž(피연산ìž)를 가질 때 ì–´ë–¤ ì½œë ˆì´ì…˜ì„ ì‚¬ìš©í• ì§€ ê²°ì •í•˜ëŠ” ë°©ë²•ì— ëŒ€í•´ì„œëŠ” :ref:`determine-collation-columns` ì„ ì°¸ê³ í•œë‹¤. .. _charset-collate-modifier: CHARSETê³¼ COLLATE ìˆ˜ì •ìž ^^^^^^^^^^^^^^^^^^^^^^^^ 기본 ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ê³¼ 문ìžì…‹ì„ 따르지 ì•Šê³ ì½œë ˆì´ì…˜ê³¼ 문ìžì…‹ì„ 변경하여 ì§€ì •í• ìˆ˜ 있는 문ìžì—´ íƒ€ìž…ì— ëŒ€í•œ ìˆ˜ì •ìžë¥¼ ì œê³µí•œë‹¤. * **CHARACTER_SET** (ë˜ëŠ” **CHARSET**) ìˆ˜ì •ìžëŠ” ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ì„ 바꾼다. * **COLLATE** ìˆ˜ì •ìžëŠ” ì¹¼ëŸ¼ì˜ ì½œë ˆì´ì…˜ì„ 바꾼다. :: <data_type> ::= <column_type> [<charset_modifier_clause>] [<collation_modifier_clause>] <charset_modifier_clause> ::= {CHARACTER_SET | CHARSET} {<char_string_literal> | <identifier> } <collation_modifier_clause> ::= COLLATE {<char_string_literal> | <identifier> } 다ìŒì€ **VARCHAR** 타입 ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ì„ UTF-8로 ì„¤ì •í•˜ëŠ” 예ì´ë‹¤. .. code-block:: sql CREATE TABLE t1 (s1 VARCHAR (100) CHARSET utf8); 다ìŒì€ 칼럼 s1ì˜ ì´ë¦„ì„ c1으로 ë°”ê¾¸ê³ , 해당 íƒ€ìž…ì„ ì½œë ˆì´ì…˜ì´ utf8_en_csì¸ CHAR(10) 으로 바꾸는 예ì´ë‹¤. 문ìžì…‹ì€ 해당 ì½œë ˆì´ì…˜ì— 대한 기본 문ìžì…‹ì¸ UTF-8으로 ì§€ì •ëœë‹¤. .. code-block:: sql ALTER TABLE t1 CHANGE s1 c1 CHAR(10) COLLATE utf8_en_cs; 다ìŒì€ c1 ì¹¼ëŸ¼ì˜ ê°’ì„ ì½œë ˆì´ì…˜ iso88591_en_ciì¸ VARCHAR(5) 타입으로 바꿔 ì¶œë ¥í•œë‹¤. ì •ë ¬ ì—°ì‚° ë˜í•œ 첫번째로 ì„ íƒëœ ì¹¼ëŸ¼ì˜ íƒ€ìž…ì— ëŒ€í•œ ì½œë ˆì´ì…˜ iso88591_en_ciì„ ì‚¬ìš©í•˜ì—¬ 수행ëœë‹¤. .. code-block:: sql SELECT CAST (c1 as VARCHAR(5) COLLATE 'iso88591_en_ci') FROM t1 ORDER BY 1; 다ìŒì€ 위와 ìœ ì‚¬í•œ 질ì˜(ê°™ì€ ì •ë ¬)ì´ì§€ë§Œ, ì¶œë ¥ë˜ëŠ” 칼럼 결과가 ì›ëž˜ì˜ ê°’ì´ë‹¤. .. code-block:: sql SELECT c1 FROM t1 ORDER BY CAST (c1 as VARCHAR(5) COLLATE iso88591_en_ci); .. _determine-collation-columns: ì½œë ˆì´ì…˜ì´ 서로 다를 때 ê²°ì • ë°©ì‹ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE utf8_en_cs, s2 STRING COLLATE utf8_tr_cs ); -- insert values into both columns SELECT s1, s2 FROM t WHERE s1 > s2; :: ERROR: '>' requires arguments with compatible collations. ìœ„ì˜ ì˜ˆì—서 칼럼 s1ê³¼ s2 는 다른 ì½œë ˆì´ì…˜ì„ ê°€ì§€ê³ ìžˆê³ , s1ê³¼ s2 를 비êµí•œë‹¤ëŠ” ê²ƒì€ í…Œì´ë¸” tì— ìžˆëŠ” ë ˆì½”ë“œë¼ë¦¬ ì–´ë–¤ ì¹¼ëŸ¼ì˜ ê°’ì´ "ë” í°ì§€" ê²°ì •í• ìˆ˜ 있는 문ìžì—´ì„ 비êµí•œë‹¤ëŠ” ê²ƒì„ ì˜ë¯¸í•œë‹¤. ì½œë ˆì´ì…˜ utf8_en_cs와 utf8_tr_cs는 서로 비êµí• 수 없으므로 ì´ ê²½ìš°ì—는 ì—러를 ì¶œë ¥í• ê²ƒì´ë‹¤. 표현ì‹ì˜ 타입 ê²°ì • ë°©ë²•ì˜ ì›ì¹™ì´ ì½œë ˆì´ì…˜ ê²°ì • 방법ì—ë„ ë§ˆì°¬ê°€ì§€ë¡œ ì ìš©ëœë‹¤. #. 표현ì‹ì˜ ëª¨ë“ ì¸ìžë“¤ì„ ê³ ë ¤í•˜ì—¬ 공통 ì½œë ˆì´ì…˜ê³¼ 문ìžì…‹ì„ ê²°ì •í•œë‹¤. #. 1.ì—서 ê²°ì •ëœ ê³µí†µ ì½œë ˆì´ì…˜(ë˜ëŠ” 문ìžì…‹)ê³¼ 다른 ì¸ìžë“¤ì„ 변환한다. #. ì½œë ˆì´ì…˜ì„ 변경하기 위해서 :func:`CAST` ì—°ì‚°ìžê°€ 사용ë 수 있다. ë¹„êµ í‘œí˜„ì‹ì˜ ê²°ê³¼ ì½œë ˆì´ì…˜ì„ ê²°ì •í•˜ê¸° 위해 "ì½œë ˆì´ì…˜ 변환ë„(collation coercibility)"를 사용한다. ì´ëŠ” ìžì‹ ì˜ ì½œë ˆì´ì…˜ì´ 얼마나 쉽게 ìƒëŒ€ ì¸ìžì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ë˜ê¸° 쉬운가를 표현한 것으로, 표현ì‹ì˜ ë‘ í”¼ì—°ì‚°ìžë¥¼ 비êµí• 때 ì½œë ˆì´ì…˜ 변환ë„ê°€ í¬ë‹¤ëŠ” ê²ƒì€ ìƒëŒ€ ì¸ìžì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 쉽게 변환ëœë‹¤ëŠ” ê²ƒì„ ì˜ë¯¸í•œë‹¤. 즉, ë†’ì€ ë³€í™˜ë„를 지닌 ì¸ìžëŠ” ë” ë‚®ì€ ë³€í™˜ë„를 지닌 ì¸ìžì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ë 수 있다. 표현ì‹ì˜ ì¸ìžë“¤ì´ 서로 다른 ì½œë ˆì´ì…˜ì„ 가지면, ì´ë“¤ì— 대한 공통 ì½œë ˆì´ì…˜ì€ ê° ì¸ìžë“¤ì˜ ì½œë ˆì´ì…˜ê³¼ 변환ë„ì— ê¸°ë°˜í•˜ì—¬ ê²°ì •ëœë‹¤. #. ë†’ì€ ë³€í™˜ë„를 가진 ì¸ìžëŠ” ë” ë‚®ì€ ë³€í™˜ë„를 가진 ì¸ìžì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ëœë‹¤. #. ì¸ìžë“¤ì˜ ì½œë ˆì´ì…˜ì´ 서로 ë‹¤ë¥´ê³ ë³€í™˜ë„ê°€ ê°™ì€ ê²½ìš°ì—는 표현ì‹ì˜ ì½œë ˆì´ì…˜ì„ ê²°ì •í• ìˆ˜ ì—†ê³ ì—러가 리턴ëœë‹¤. 단, ì½œë ˆì´ì…˜ ë³€í™˜ë„ 11(호스트 변수, ì‚¬ìš©ìž ì •ì˜ ë³€ìˆ˜)ì´ê³ ë™ì¼í•œ 문ìžì…‹ì¸ ë‘ í”¼ì—°ì‚°ìžë¥¼ 비êµí•˜ëŠ” 경우 둘 중 하나가 ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜(utf8_bin, iso88591_bin, euckr_bin)ì´ë©´ ë°”ì´ë„ˆë¦¬ê°€ 아닌(non-binary) ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ëœë‹¤. :ref:`세션 변수와(ë˜ëŠ”) 호스트 ë³€ìˆ˜ì˜ ë¹„êµ <comparison-between-session-and-or-host-variables>`\를 ì°¸ê³ í•œë‹¤. í‘œí˜„ì‹ ì¸ìžë“¤ì˜ 변환ë„는 다ìŒì˜ 표와 같다. .. _collation-coercibility: +------------------------+------------------------------------------------------------------------------------------------------+ | ì½œë ˆì´ì…˜ ë³€í™˜ë„ | 표현ì‹ì˜ ì¸ìž(피연사ìž) | +========================+======================================================================================================+ | -1 | 호스트 ë³€ìˆ˜ë§Œì„ ê°€ì§€ëŠ” 표현ì‹ìœ¼ë¡œ, 실행단계 ì´ì „ì—는 ì½œë ˆì´ì…˜ 변환ë„를 | | | ê²°ì •í• ìˆ˜ 없는 경우. | +------------------------+------------------------------------------------------------------------------------------------------+ | 0 | **COLLATE** ìˆ˜ì •ìžë¥¼ 가진 í”¼ì—°ì‚°ìž | +------------------------+------------------------------------------------------------------------------------------------------+ | 1 | **Columns** ì´ ë°”ì´ë„ˆë¦¬ê°€ 아닌 (non-binary) ì½œë ˆì´ì…˜ì„ 가진 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 2 | **Columns** ì´ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ê³¼ ISO-8859-1 문ìžì…‹(iso88591_bin)ì„ ê°€ì§„ 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 3 | **Columns** ì´ ISO-8859-1 문ìžì…‹ì„ 가진 경우를 ì œì™¸í•˜ê³ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì„ 가진 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 4 | **SELECT ê°’**, **표현ì‹**\ ì´ ë°”ì´ë„ˆë¦¬ê°€ 아닌 ì½œë ˆì´ì…˜ì„ 가진 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 5 | **SELECT ê°’**, **표현ì‹**\ ì´ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ê³¼ ISO-8859-1 문ìžì…‹(iso88591_bin)ì„ ê°€ì§„ 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 6 | **SELECT ê°’**, **표현ì‹**\ ì´ ISO-8859-1 문ìžì…‹ì„ 가진 경우를 ì œì™¸í•˜ê³ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì„ 가진 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 7 | **특수 함수들** (:func:`SYSTEM_USER`, :func:`DATABASE`, :func:`SCHEMA`, :func:`VERSION`) | +------------------------+------------------------------------------------------------------------------------------------------+ | 8 | **ìƒìˆ˜ 문ìžì—´**\ ì´ ë°”ì´ë„ˆë¦¬ê°€ 아닌(non-binary) ì½œë ˆì´ì…˜ì„ 가진 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 9 | **ìƒìˆ˜ 문ìžì—´**\ ì´ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ê³¼ ISO-8859-1 문ìžì…‹(iso88591_bin)ì„ ê°€ì§„ 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 10 | **ìƒìˆ˜ 문ìžì—´**\ ì´ ISO-8859-1 문ìžì…‹ì„ 가진 경우를 ì œì™¸í•˜ê³ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì„ 가진 경우 | +------------------------+------------------------------------------------------------------------------------------------------+ | 11 | 호스트 변수, ì‚¬ìš©ìž ì •ì˜ ë³€ìˆ˜ | +------------------------+------------------------------------------------------------------------------------------------------+ .. note:: 9.x ë²„ì „ì—서는 ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì„ ì§€ì›í•˜ì§€ 않았으며, ëŒ€ì‹ iso85891_bin ì½œë ˆì´ì…˜ì´ 기본 ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ ê¸°ëŠ¥ì„ í–ˆë‹¤. ë²„ì „ 10.0부터는 iso88591_binì´ í¬í•¨ëœ ì»¬ëŸ¼ì˜ ë³€í™˜ë„(coercibility)ê°€ 2ì—서 3으로 강등ë˜ì—ˆê³ , iso88591_binì´ í¬í•¨ëœ 표현ì‹ì—서는 5ì—서 6으로, iso88591_binì´ í¬í•¨ëœ ìƒìˆ˜ì—서는 9ì—서 10으로 강등ë˜ì—ˆë‹¤. 호스트 ë³€ìˆ˜ë§Œì„ ì¸ìžë¡œ 가지는 표현ì‹(예: ì•„ëž˜ì˜ UPPER(?))ì— ëŒ€í•´ì„œëŠ” 실행 단계ì—서 ì½œë ˆì´ì…˜ 변환ë„를 ê²°ì •í• ìˆ˜ 있다. 즉, 파싱 단계ì—서는 ì´ëŸ¬í•œ 표현ì‹ì˜ ì½œë ˆì´ì…˜ 변환ë„를 ê²°ì •í• ìˆ˜ 없으므로 COERCIBILITY 함수는 -1ì„ ë°˜í™˜í•œë‹¤. .. code-block:: sql SET NAMES utf8 PREPARE st FROM 'SELECT COLLATION(UPPER(?)) col1, COERCIBILITY(UPPER(?)) col2'; EXECUTE st USING 'a', 'a'; :: col1 col2 =================================== 'utf8_bin' -1 ëª¨ë“ ì¸ìžì˜ 변환ë„ê°€ 11ì´ê³ ì½œë ˆì´ì…˜ì´ 서로 다른 표현ì‹ì—서는 ì‹¤í–‰ì¤‘ì— ê³µí†µ ì½œë ˆì´ì…˜ì´ 확ì¸ëœë‹¤(ì´ê²ƒì€ ìœ ì¶”ë¥¼ 위한 ë³€í™˜ë„ ê°’ 기반 ê·œì¹™ì˜ ì˜ˆì™¸ 사í•ì´ë©° 오류를 ìœ ë°œí• ê²ƒì´ë‹¤.) .. code-block:: sql PREPARE st1 FROM 'SELECT INSERT(?,2,2,?)'; EXECUTE st1 USING _utf8'abcd', _binary'ef'; :: insert( ?:0 , 2, 2, ?:1 ) ====================== 'aefd' ì½œë ˆì´ì…˜ì´ 서로 다른 ë‘ ê°œì˜ ì¸ìžê°€ í•˜ë‚˜ì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ë˜ëŠ” 경우를 살펴보면 다ìŒê³¼ 같다. * **ì›í•˜ëŠ” ì½œë ˆì´ì…˜ì„ ì§€ì •í•˜ì—¬ 변환** ì•žì˜ ì˜ˆì œì—서 ì‹¤í–‰ì— ì‹¤íŒ¨í•œ **SELECT** ë¬¸ì€ ë‹¤ìŒ ì§ˆì˜ë¬¸ì²˜ëŸ¼ 한 ì¹¼ëŸ¼ì— **CAST** ì—°ì‚°ìžë¡œ ì½œë ˆì´ì…˜ì„ ì§€ì •í•˜ì—¬ ë‘ í”¼ì—°ì‚°ìžë¥¼ ê°™ì€ ì½œë ˆì´ì…˜ì„ ê°–ë„ë¡ í•˜ë©´ 성공ì 으로 수행ëœë‹¤. .. code-block:: sql SELECT s1, s2 FROM t WHERE s1 > CAST (s2 AS STRING COLLATE utf8_en_cs); ë˜í•œ, s2를 ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ìœ¼ë¡œ **CAST** 하면, s1ì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ ë³€í™˜ë„ (6)ì€ s1ì˜ ë³€í™˜ë„ (1)보다 높다. .. code-block:: sql SELECT s1, s2 FROM t WHERE s1 > CAST (s2 AS STRING COLLATE utf8_bin); 다ìŒê³¼ ê°™ì€ ì§ˆì˜ë¬¸ì—서 ë‘ ë²ˆì§¸ í”¼ì—°ì‚°ìž "CAST (s2 AS STRING COLLATE utf8_tr_cs)"는 서브 표현ì‹ì´ê³ , 서브 표현ì‹ì€ 칼럼(s1)보다 ë” ë†’ì€ ë³€í™˜ë„를 가지기 때문ì—, "CAST (s2 AS STRING COLLATE utf8_tr_cs)"는 s1ì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ëœë‹¤. .. code-block:: sql SELECT s1, s2 FROM t WHERE s1 > CAST (s2 AS STRING COLLATE utf8_tr_cs); ì–´ë–¤ 표현ì‹ì´ë“ 표현ì‹ì€ 칼럼보다 ë†’ì€ ë³€í™˜ë„를 갖는다. .. code-block:: sql SELECT s1, s2 FROM t WHERE s1 > CONCAT (s2, ''); * **ìƒìˆ˜ì™€ ì¹¼ëŸ¼ì˜ ì½œë ˆì´ì…˜ 변환** 다ìŒì˜ 경우 칼럼 s1ì˜ ì½œë ˆì´ì…˜ì„ 사용하여 비êµê°€ 수행ëœë‹¤. .. code-block:: sql SELECT s1, s2 FROM t WHERE s1 > 'abc'; * **ì¹¼ëŸ¼ì´ Bin ì½œë ˆì´ì…˜ìœ¼ë¡œ ìƒì„±ë˜ëŠ” 경우** .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE utf8_en_cs, s2 STRING COLLATE utf8_bin ); SELECT s1, s2 FROM t WHERE s1 > s2; 위 경우 s2 ì¹¼ëŸ¼ì˜ ë³€í™˜ë„는 6( Bin ì½œë ˆì´ì…˜)으로, s1 ì¹¼ëŸ¼ì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ "ì™„ì „ížˆ 변환 가능"하여 utf8_en_cs ì½œë ˆì´ì…˜ì´ 사용ëœë‹¤. .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE utf8_en_cs, s2 STRING COLLATE iso88591_bin ); SELECT s1, s2 FROM t WHERE s1 > s2; 위 경우ì—ë„ ë§ˆì°¬ê°€ì§€ë¡œ ì½œë ˆì´ì…˜ìœ¼ë¡œ utf8_en_csê°€ 사용ë˜ëŠ”ë°, s2 ì¹¼ëŸ¼ì´ ISO 문ìžì…‹ì´ë¯€ë¡œ UTF-8로 변환하는 오버헤드가 ë°œìƒí•œë‹¤ëŠ” ì°¨ì´ê°€ 있다. ë‹¤ìŒ ì§ˆì˜ë¬¸ì—서 문ìžì…‹ ë³€í™˜ì€ ë°œìƒí•˜ì§€ ì•Šê³ s2 ì¹¼ëŸ¼ì˜ UTF-8ì˜ ë°”ì´íЏ ë°ì´í„°ëŠ” 간단하게 ISO-8859-1 문ìžì…‹ìœ¼ë¡œ 재해ì„ë˜ë©°, iso88591_en_cs ì½œë ˆì´ì…˜ì„ 사용하여 ë¬¸ìž ë¹„êµë§Œ 수행ëœë‹¤. .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE iso88591_en_cs, s2 STRING COLLATE utf8_bin ); SELECT s1, s2 FROM t WHERE s1 > s2; * **서브 표현ì‹ê³¼ ì¹¼ëŸ¼ì˜ ì½œë ˆì´ì…˜ 변환** .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE utf8_en_cs, s2 STRING COLLATE utf8_tr_cs ); SELECT s1, s2 FROM t WHERE s1 > s2 + 'abc'; 위 경우 ë‘ ë²ˆì§¸ 피연산ìžëŠ” 표현ì‹ì´ê¸° ë•Œë¬¸ì— s1ì˜ ì½œë ˆì´ì…˜ì´ 사용ëœë‹¤. ë‹¤ìŒ ì˜ˆì œëŠ” 서로 다른 ì½œë ˆì´ì…˜ì„ 지닌 s2와 s3ì— ëŒ€í•´ '+' ì—°ì‚°ì„ ìˆ˜í–‰í•˜ë ¤ê³ í•˜ê¸° ë•Œë¬¸ì— ì—러가 ë°œìƒí•œë‹¤. .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE utf8_en_cs, s2 STRING COLLATE utf8_tr_cs, s3 STRING COLLATE utf8_en_ci ); SELECT s1, s2 FROM t WHERE s1 > s2 + s3; :: ERROR: '+' requires arguments with compatible collations. ë‹¤ìŒ ì˜ˆì œì—서는 s2와 s3ê°€ ê°™ì€ ì½œë ˆì´ì…˜ì´ë¯€ë¡œ '+' 표현ì‹ì´ utf8_tr_csì´ ë˜ê³ , s1ì€ ì¹¼ëŸ¼ì´ë¯€ë¡œ 표현ì‹ë³´ë‹¤ ë‚®ì€ ë³€í™˜ë„를 갖기 ë•Œë¬¸ì— ë¹„êµ ì—°ì‚°ì€ utf8_en_cs ì½œë ˆì´ì…˜ì„ 사용해서 수행ëœë‹¤. .. code-block:: sql CREATE TABLE t ( s1 STRING COLLATE utf8_en_cs, s2 STRING COLLATE utf8_tr_cs, s3 STRING COLLATE utf8_tr_cs ); SELECT s1, s2 FROM t WHERE s1 > s2 + s3; * **숫ìž, ë‚ ì§œ 타입 ìƒìˆ˜ì˜ ì½œë ˆì´ì…˜ 변환** ì—°ì‚° ê³¼ì •ì—서 문ìžì—´ë¡œ 변환 가능한 ìˆ«ìž ë˜ëŠ” ë‚ ì§œ 타입 ìƒìˆ˜ëŠ” í•ìƒ ìƒëŒ€ 문ìžì—´ì˜ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ë 수 있다. .. _comparison-between-session-and-or-host-variables: * **세션 변수와(ë˜ëŠ”) 호스트 ë³€ìˆ˜ì˜ ì½œë ˆì´ì…˜ 변환** ì½œë ˆì´ì…˜ 변환ë„ê°€ 11(세션 변수, 호스트 변수)ì´ê³ 문ìžì…‹ì´ ë™ì¼í•œ 피연산ìžë¼ë¦¬ 비êµí•˜ëŠ” 경우 ë°”ì´ë„ˆë¦¬ê°€ 아닌(non-bin) ì½œë ˆì´ì…˜ìœ¼ë¡œ 변환ëœë‹¤. .. code-block:: sql SET NAMES utf8; SET @v1='a'; PREPARE stmt FROM 'SELECT COERCIBILITY(?), COERCIBILITY(@v1), COLLATION(?), COLLATION(@v1), ? = @v1'; SET NAMES utf8 COLLATE utf8_en_ci; EXECUTE stmt USING 'A', 'A', 'A'; @v1ê³¼ 'A'를 비êµí•˜ë©´ @v1ì€ ë°”ì´ë„ˆë¦¬ê°€ 아닌 ì½œë ˆì´ì…˜ì¸ utf8_en_ci로 변환ë˜ì–´ @v1ê³¼ 'A'ê°€ 서로 ë™ì¼í•˜ê²Œ ë˜ë¯€ë¡œ, 아래처럼 "? = @v1"ì˜ ê²°ê³¼ëŠ” 1ì´ ëœë‹¤. :: coercibility( ?:0 ) coercibility(@v1) collation( ?:1 ) collation(@v1) ?:2 =@v1 =================================================================================================== 11 11 'utf8_en_ci' 'utf8_bin' 1 .. code-block:: sql SET NAMES utf8 COLLATE utf8_en_cs; EXECUTE stmt USING 'A', 'A', 'A'; @v1ê³¼ 'A'를 비êµí•˜ë©´ @v1ì€ ë°”ì´ë„ˆë¦¬ê°€ 아닌 ì½œë ˆì´ì…˜ì¸ utf8_en_cs로 변환ë˜ì–´ @v1ê³¼ 'A'ê°€ 서로 다르게 ë˜ë¯€ë¡œ, 아래처럼 "? = @v1"ì˜ ê²°ê³¼ëŠ” 0ì´ ëœë‹¤. :: coercibility( ?:0 ) coercibility(@v1) collation( ?:1 ) collation(@v1) ?:2 =@v1 =================================================================================================== 11 11 'utf8_en_cs' 'utf8_bin' 0 그러나, 아래와 ê°™ì´ @v1ê³¼ 'A'ì˜ ì½œë ˆì´ì…˜ì´ 둘 다 ë°”ì´ë„ˆë¦¬ê°€ 아닌 ì½œë ˆì´ì…˜ì´ê³ ë‘ ì½œë ˆì´ì…˜ì´ 서로 다르면 ì—러가 ë°œìƒí•œë‹¤. .. code-block:: sql DEALLOCATE PREPARE stmt; SET NAMES utf8 COLLATE utf8_en_ci; SET @v1='a'; PREPARE stmt FROM 'SELECT COERCIBILITY(?), COERCIBILITY(@v1), COLLATION(?), COLLATION(@v1), ? = @v1'; SET NAMES utf8 COLLATE utf8_en_cs; EXECUTE stmt USING 'A', 'A', 'A'; :: ERROR: Context requires compatible collations. ENUM 타입 ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ENUM 타입 ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì€ DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì„ ë”°ë¥¸ë‹¤. 예를 들어, en_US.iso88591로 DB를 ìƒì„±í•˜ì—¬ ë‹¤ìŒ í…Œì´ë¸”ì„ ìƒì„±í•œë‹¤. .. code-block:: sql CREATE TABLE tbl (e ENUM (_utf8'a', _utf8'b')); 위ì—서 ìƒì„±ëœ í…Œì´ë¸”ì˜ ì¹¼ëŸ¼ 'e'는 ê·¸ ì›ì†Œì˜ 문ìžì…‹ì´ UTF8로 ì •ì˜ë˜ì–´ 있ë”ë¼ë„ ISO88591 문ìžì…‹, iso88591_bin ì½œë ˆì´ì…˜ì„ 가진다. 문ìžì—´ ì›ì†ŒëŠ” ì¹¼ëŸ¼ì´ ìƒì„±ë 때 UTF8 문ìžì…‹ì—서 ISO88591 문ìžì…‹ìœ¼ë¡œ 변환ëœë‹¤. 사용ìžê°€ 다른 문ìžì…‹ì´ë‚˜ ì½œë ˆì´ì…˜ì„ ì ìš©í•˜ê³ ì‹¶ìœ¼ë©´ í…Œì´ë¸”ì˜ ì¹¼ëŸ¼ì— ëŒ€í•´ ì´ë¥¼ 명시해야 한다. 아래는 í…Œì´ë¸”ì˜ ì¹¼ëŸ¼ì— ëŒ€í•´ ì½œë ˆì´ì…˜ì„ 명시하는 예ì´ë‹¤. .. code-block:: sql CREATE TABLE t (e ENUM (_utf8'a', _utf8'b') COLLATE utf8_bin); CREATE TABLE t (e ENUM (_utf8'a', _utf8'b')) COLLATE utf8_bin; .. _collation-charset-table: í…Œì´ë¸”ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ -------------------------- í…Œì´ë¸” ìƒì„± êµ¬ë¬¸ì— ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ ì§€ì •í• ìˆ˜ 있다. :: CREATE TABLE table_name (<column_list>) [CHARSET charset_name] [COLLATE collation_name] ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ ìƒëžµë˜ë©´, í…Œì´ë¸”ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ 사용ëœë‹¤. í…Œì´ë¸”ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ ìƒëžµë˜ë©´, ì‹œìŠ¤í…œì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ 사용ëœë‹¤. 다ìŒì€ í…Œì´ë¸”ì— ì½œë ˆì´ì…˜ì„ ì§€ì •í•˜ëŠ” 예ì´ë‹¤. .. code-block:: sql CREATE TABLE tbl ( i1 INTEGER, s STRING ) CHARSET utf8 COLLATE utf8_en_cs; ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ì´ ì§€ì •ë˜ì–´ ìžˆê³ í…Œì´ë¸”ì˜ ì½œë ˆì´ì…˜ì´ ì§€ì •ë˜ëŠ” 경우, 해당 ì¹¼ëŸ¼ì˜ ì½œë ˆì´ì…˜ì€ ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ì— 대한 기본 ì½œë ˆì´ì…˜(<collation_name>_bin)ì´ ì§€ì •ëœë‹¤. .. code-block:: sql CREATE TABLE tbl (col STRING CHARSET utf8) COLLATE utf8_en_ci; ìœ„ì˜ ì§ˆì˜ë¬¸ì—서 칼럼 colì˜ ì½œë ˆì´ì…˜ì€ ì¹¼ëŸ¼ì— ëŒ€í•œ 문ìžì…‹ì˜ 기본 ì½œë ˆì´ì…˜ì¸ utf8_binì´ ëœë‹¤. :: csql> ;sc tbl <Class Name> tbl COLLATE utf8_en_ci <Attributes> col CHARACTER VARYING(1073741823) COLLATE utf8_bin .. _collation-charset-string: 문ìžì—´ ë¦¬í„°ëŸ´ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ --------------------------------- 문ìžì—´ 리터럴(string literal)ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì€ 다ìŒê³¼ ê°™ì€ ìš°ì„ ìˆœìœ„ì— ë”°ë¼ ì •í•´ì§„ë‹¤. #. :ref:`charset-introducer` ë˜ëŠ” 문ìžì—´ì˜ :ref:`COLLATE ìˆ˜ì •ìž<charset-collate-modifier>` #. :ref:`set-names-stmt`\으로 명시한 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ #. 시스템 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜(DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì— ì˜í•œ 기본 ì½œë ˆì´ì…˜) .. _set-names-stmt: SET NAMES 문 ^^^^^^^^^^^^ **SET NAMES** ë¬¸ì€ ê¸°ë³¸ í´ë¼ì´ì–¸íЏ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ ê°’ì„ ë³€ê²½í•˜ì—¬, ì´ë¥¼ 실행한 í´ë¼ì´ì–¸íЏì—서 ì´í›„ì— ì‹¤í–‰í•˜ëŠ” ëª¨ë“ ë¬¸ìž¥ì€ ì§€ì •í•œ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ 가지게 ëœë‹¤. êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: SET NAMES [charset_name] [COLLATE collation_name] * *charset_name*: ìœ íš¨í•œ 문ìžì…‹ ì´ë¦„ì€ iso88591, utf8,euckr ê·¸ë¦¬ê³ binaryì´ë‹¤. * *collation_name*: ì½œë ˆì´ì…˜ ì§€ì •ì€ ìƒëžµí• 수 있으며, ëª¨ë“ ê°€ëŠ¥í•œ ì½œë ˆì´ì…˜ì´ ì„¤ì •ë 수 있다. ì½œë ˆì´ì…˜ê³¼ 문ìžì…‹ì€ 호환ë˜ì–´ì•¼ 하며, ê·¸ë ‡ì§€ 않으면 오류가 ë°œìƒí•œë‹¤. 사용 가능한 ì½œë ˆì´ì…˜ ì´ë¦„ì€ **db_collation** 카탈로그 뷰를 검색하여 확ì¸í• 수 있다. (:ref:`collation-charset-column` ì°¸ê³ ) **SET NAMES** 문으로 ì½œë ˆì´ì…˜ì„ ì§€ì •í•˜ëŠ” ê²ƒì€ ì‹œìŠ¤í…œ 파ë¼ë¯¸í„° intl_collationì„ ì§€ì •í•˜ëŠ” 것과 같다. ë”°ë¼ì„œ, ë‹¤ìŒ ë‘ ë¬¸ìž¥ì€ ê°™ì€ ë™ìž‘ì„ ìˆ˜í–‰í•œë‹¤. .. code-block:: sql SET NAMES utf8; SET SYSTEM PARAMETERS 'intl_collation=utf8_bin'; 다ìŒì€ 기본 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ 가진 문ìžì—´ ìƒìˆ˜ë¥¼ ìƒì„±í•œë‹¤. .. code-block:: sql SELECT 'a'; 다ìŒì€ utf8 문ìžì…‹ê³¼ utf8_bin ì½œë ˆì´ì…˜ì„ 가진 문ìžì—´ ìƒìˆ˜ë¥¼ ìƒì„±í•œë‹¤. ì°¸ê³ ë¡œ 기본 ì½œë ˆì´ì…˜ì€ 해당 문ìžì…‹ì˜ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì´ë‹¤. .. code-block:: sql SET NAMES utf8; SELECT 'a'; .. _charset-introducer: 문ìžì…‹ ì†Œê°œìž ^^^^^^^^^^^^^ ìƒìˆ˜ 문ìžì—´ 앞ì—는 문ìžì…‹ 소개ìž(introducer)ê°€ 올 수 ìžˆê³ , ë’¤ì—는 **COLLATE** ìˆ˜ì •ìž(modifier)ê°€ 올 수 있는ë°, 문ìžì…‹ 소개ìžëŠ” ì–¸ë”ë°”(_)로 시작하는 문ìžì…‹ ì´ë¦„으로 ìƒìˆ˜ 문ìžì—´ ì•žì— ì˜¬ 수 있다. 문ìžì—´ì— 대해 문ìžì…‹ 소개ìžì™€ **COLLATE** ìˆ˜ì •ìžë¥¼ ì§€ì •í•˜ëŠ” êµ¬ë¬¸ì€ ë‹¤ìŒê³¼ 같다. :: [charset_introducer]'constant-string' [COLLATE collation_name] * *charset_introducer*: ì–¸ë”ë°”(_)를 ì•žì— ë¶™ì¸ ë¬¸ìžì…‹ ì´ë¦„으로 ìƒëžµí• 수 있다. _utf8, _iso88591, _euckr, _binary 중 하나를 ìž…ë ¥í• ìˆ˜ 있다. * *constant-string*: ìƒìˆ˜ 문ìžì—´ ê°’ì´ë‹¤. * *collation_name*: 시스템ì—서 사용 가능한 ì½œë ˆì´ì…˜ ì´ë¦„으로 ìƒëžµí• 수 있다. ìƒìˆ˜ 문ìžì—´ì˜ 기본 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì€ í˜„ìž¬ì˜ ë°ì´í„°ë² ì´ìФ ì—°ê²°ì„ ê¸°ì¤€ìœ¼ë¡œ ì •í•´ì§€ë©°, 가장 ë§ˆì§€ë§‰ì— ìˆ˜í–‰í•œ **SET NAMES** 문 ë˜ëŠ” 기본값으로 ì„¤ì •ëœë‹¤. 문ìžì…‹ ì†Œê°œìž ë˜ëŠ” **COLLATE** ìˆ˜ì •ìžë¥¼ ìƒëžµí–ˆì„ 때는 다ìŒê³¼ ê°™ì´ ë™ìž‘한다. * 문ìžì…‹ 소개ìžë¥¼ ì§€ì •í•˜ê³ **COLLATE** ìˆ˜ì •ìžë¥¼ ìƒëžµí• 때, * 문ìžì…‹ 소개ìžê°€ í´ë¼ì´ì–¸íЏ 문ìžì…‹(SET NAMES로 ì§€ì •)ê³¼ ë™ì¼í•˜ë©´ í´ë¼ì´ì–¸íЏ ì½œë ˆì´ì…˜ì´ ì ìš©ëœë‹¤. * 문ìžì…‹ 소개ìžê°€ í´ë¼ì´ì–¸íЏ 문ìžì…‹ê³¼ ë™ì¼í•˜ì§€ 않으면 문ìžì…‹ 소개ìžì™€ ë™ì¼í•œ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜(euckr_bin, iso88591_bin, utf8_bin 중 하나)ì´ ì ìš©ëœë‹¤. * 문ìžì…‹ 소개ìžë¥¼ ìƒëžµí•˜ê³ **COLLATE** ìˆ˜ì •ìžë¥¼ ì§€ì •í•˜ë©´, 문ìžì…‹ì€ ì½œë ˆì´ì…˜ì— ë”°ë¼ ì ìš©ëœë‹¤. 다ìŒì€ 문ìžì…‹ 소개ìžì™€ **COLLATE** ìˆ˜ì •ìžë¥¼ ì§€ì •í•˜ëŠ” ì˜ˆì œì´ë‹¤. .. code-block:: sql SELECT 'cubrid'; SELECT _utf8'cubrid'; SELECT _utf8'cubrid' COLLATE utf8_en_cs; ë‹¤ìŒ ì˜ˆì—서는 utf8 문ìžì…‹ê³¼ utf8_en_cs ì½œë ˆì´ì…˜ì„ 가지는 문ìžì—´ ìƒìˆ˜ë¥¼ ìƒì„±í•œë‹¤. **SELECT** ë¬¸ì˜ **COLLATE** ìˆ˜ì •ìžê°€ **SET NAMES** 문ì—서 ì§€ì •í•œ ì½œë ˆì´ì…˜ì„ 오버ë¼ì´ë“œí•œë‹¤. .. code-block:: sql SET NAMES utf8 COLLATE utf8_en_ci; SELECT 'a' COLLATE utf8_en_cs; 표현ì‹ì˜ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ -------------------------- í‘œí˜„ì‹ ê²°ê³¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì€ 표현ì‹ì˜ ì¸ìžë“¤ë¡œë¶€í„° ì¶”ë¡ ëœë‹¤. ì½œë ˆì´ì…˜ ì¶”ë¡ ê³¼ì •ì€ ì½œë ˆì´ì…˜ 변환ë„(coercibility)ì— ê¸°ë°˜í•˜ë©° ì´ì— 관한 ìžì„¸í•œ ë‚´ìš©ì€ :ref:`determine-collation-columns`\ ì„ ì°¸ê³ í•œë‹¤. ëª¨ë“ ë¬¸ìžì—´ ë§¤ì¹ í•¨ìˆ˜(LIKE, REPLACE, INSTR, POSITION, LOCATE, SUBSTRING_INDEX, FIND_IN_SET 등)와 ë¹„êµ ì—°ì‚°ìžë“¤(<, >, = 등)ì—서 ì½œë ˆì´ì…˜ì´ ê³ ë ¤ëœë‹¤. 시스템 ë°ì´í„°ì˜ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ --------------------------------- 시스템 문ìžì…‹ì€ DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì— ì˜í•´ ì •í•´ì§„ë‹¤. ì‹œìŠ¤í…œì˜ ì½œë ˆì´ì…˜ì€ í•ìƒ ì‹œìŠ¤í…œ 문ìžì…‹ì˜ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜(<*charset*>_bin)ì´ë‹¤. CUBRID는 iso88591, euckr, utf8 ì´ë ‡ê²Œ 3ê°œì˜ ë¬¸ìžì…‹ì„ ì§€ì›í•˜ë©°, ì´ì— 따른 iso88591_bin, euckr_bin, utf8_bin ì´ë ‡ê²Œ 3ê°œì˜ ì‹œìŠ¤í…œ ì½œë ˆì´ì…˜ì„ ì§€ì›í•œë‹¤. DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì˜ ì˜í–¥ ----------------------------- DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì€ ë‹¤ìŒì— ì˜í–¥ì„ ë¼ì¹œë‹¤. * ì‹ë³„ìž(identifier)와 ëŒ€ì†Œë¬¸ìž ê·œì¹™ì—서 ì§€ì›ë˜ëŠ” 문ìž(ì´ë¥¼ "알파벳"ì´ë¼ê³ ì§€ì¹í•¨) * ë‚ ì§œ-문ìžì—´ 변환 í•¨ìˆ˜ë“¤ì— ëŒ€í•œ 기본 로캘 * 숫ìž-문ìžì—´ 변환 í•¨ìˆ˜ë“¤ì— ëŒ€í•œ 기본 로캘 * CSQLì—서 콘솔 변환 .. _casing-and-identifiers: ì‹ë³„ìžì˜ ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ^^^^^^^^^^^^^^^^^^^^^^ CUBRIDì—서 ì‹ë³„ìžëŠ” ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì„ í•˜ì§€ 않는다. í…Œì´ë¸” 칼럼, ì‚¬ìš©ìž ì •ì˜ ë³€ìˆ˜, 트리거, ì €ìž¥ í”„ë¡œì‹œì €ë“¤ì˜ ì´ë¦„ì€ ì†Œë¬¸ìžë¡œ, ì‚¬ìš©ìž ì´ë¦„ ë° ê·¸ë£¹ ì´ë¦„ì€ ëŒ€ë¬¸ìžë¡œ ì €ìž¥ëœë‹¤. ISO-8859-1ì€ 255 ê°œì˜ ë¬¸ìžë§Œì„ í¬í•¨í•˜ë¯€ë¡œ ì „ì²´ 문ìžë“¤ì´ ëŒ€ì†Œë¬¸ìž ë³€í™˜ì˜ ëŒ€ìƒì´ ë˜ë©°, EUC-KR 문ìžì…‹ì—서는 ASCII 호환 문ìžë“¤ë§Œì´ ëŒ€ì†Œë¬¸ìž ë³€í™˜ì˜ ëŒ€ìƒì´ ëœë‹¤. ISO-8859-1ê³¼ EUC-KR 문ìžì…‹ì€ 내장ëœ(built-in) ë°ì´í„°ì´ë‹¤. UTF-8 문ìžì…‹ì— 해당하는 ë¡œìº˜ì€ ë‚´ìž¥ëœ ë¡œìº˜(en_US.utf8, tr_TR.utf8, ko_KR.utf8)ê³¼ LDML ë¡œìº˜ì˜ ë‘ ì¢…ë¥˜ê°€ 있다. ë‚´ìž¥ëœ ë¡œìº˜ì€ íŠ¹ì • 문ìž(en_US.utf8ê³¼ ko_KR.utf8ì—서는 ASCII 문ìž, tr_TR.utf8ì—서는 ASCII 문ìžì™€ í„°í‚¤ì–´ì˜ ê¸€ë¦¬í”„(glyphs) [#f1]_)ë§Œ 구현한 것ì´ë‹¤. 즉, 최대 4 ë°”ì´íŠ¸ê¹Œì§€ ì¸ì½”ë”©ëœ ëª¨ë“ UTF-8 문ìžëŠ” ì‹ë³„ìžë¡œ 받아들여지기는 하지만, ì´ ì¤‘ ëŒ€ë¶€ë¶„ì˜ ë¬¸ìžë“¤ì€ ì¼ë°˜ì ì¸ ìœ ë‹ˆì½”ë“œ 문ìžë¡œ 처리ë˜ì–´ ëŒ€ì†Œë¬¸ìž ë³€í™˜ì´ ì´ë¤„지지 않는다는 ê²ƒì„ ëœ»í•œë‹¤. 예를 들어, í…Œì´ë¸” ì´ë¦„ì—서 È(ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íЏ 00C8)는 허용ë˜ì§€ë§Œ, ê·¸ê²ƒì„ í¬í•¨í•˜ëŠ” ì‹ë³„ìžëŠ” ì†Œë¬¸ìž "è"로 변환ë˜ì–´ 표현ë˜ì§€ 않는다. .. code-block:: sql CREATE TABLE ÈABC; ë”°ë¼ì„œ, ìœ„ì˜ ì§ˆì˜ ìˆ˜í–‰ 시 í…Œì´ë¸” ì´ë¦„ì€ **_db_class** 시스템 í…Œì´ë¸”ì— "Èabc"ë¼ëŠ” ì´ë¦„으로 ì €ìž¥ëœë‹¤. LDML 로캘(ë‚´ìž¥ëœ ë¡œìº˜ì€ LDML ë¡œìº˜ì— ì˜í•´ 오버ë¼ì´ë“œë¨)ì€ ì§€ì›í•˜ëŠ” ìœ ë‹ˆì½”ë“œ 문ìžì…‹ì„ 코드í¬ì¸íЏ FFFF까지 확장하므로 ì‹ë³„ìžì— 대해 í™•ìž¥ëœ ì•ŒíŒŒë²³ì˜ ëŒ€ì†Œë¬¸ìž ë³€í™˜ì´ ê°€ëŠ¥í•˜ë‹¤. 예를 들어, DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì´ es_ES.utf8ì´ê³ 해당 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 로딩ë˜ë©´, ìœ„ì˜ CREATE TABLE ë¬¸ì€ "èabc"ë¼ëŠ” ì´ë¦„ì„ ê°€ì§„ í…Œì´ë¸”ì„ ìƒì„±í•œë‹¤. 앞서 설명한 바와 ê°™ì´ ëŒ€ì†Œë¬¸ìž ê·œì¹™ê³¼ ì§€ì›ë˜ëŠ” 문ìžë“¤ë¡œ "알파벳"(LDML 파ì¼ì— "alphabet" 태그로 ì •ì˜ë¨)ì´ êµ¬ì„±ë˜ë©°, tr_TRê³¼ de_DE와 ê°™ì€ ì¼ë¶€ ë¡œìº˜ë“¤ì€ íŠ¹ë³„í•œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ì„ ê°€ì§„ë‹¤. 터키어ì—서 lower ('I') = 'ı'(ì 없는 ì†Œë¬¸ìž i)ì´ê³ , upper ('i') = 'İ'(ì 있는 ëŒ€ë¬¸ìž I)ì´ë‹¤. ë…ì¼ì–´ì—서 upper ('ß') = 'SS'(ë‘ ê°œì˜ ëŒ€ë¬¸ìž S)ì´ë‹¤. ì´ëŸ° 특수한 ê·œì¹™ì„ ê°–ëŠ” ë¡œìº˜ë“¤ì€ ì‹ë³„ìžê°€ ëŒ€ë¬¸ìž ë˜ëŠ” 소문ìžë¡œ 변환 ì €ìž¥ë˜ë©´ì„œ ë°œìƒí• 수 있는 ë¬¸ì œë¥¼ 피하기 위해 시스템 ë°ì´í„°(ì‹ë³„ìž)를 위한 "알파벳"ê³¼ ì‚¬ìš©ìž ë°ì´í„°ë¥¼ 위한 "알파벳" ë‘ ê°œë¥¼ 가진다. 즉, ì‚¬ìš©ìž ë°ì´í„°ì— ì ìš©ë˜ëŠ” "알파벳"ì€ ìœ„ì—서 설명한 특별한 ê·œì¹™ì„ í¬í•¨í•˜ëŠ” 반면, 시스템 ë°ì´í„°(ì‹ë³„ìž)를 위한 "알파벳"ì€ íŠ¹ë³„í•œ ê·œì¹™ì„ í¬í•¨í•˜ì§€ 않는다. 예를 들어 터키어ì—서 그룹 ì´ë¦„ "public"ì— ëŒ€í•´ ì‚¬ìš©ìž ë°ì´í„°ì— ì ìš©ë˜ëŠ” "알파벳"ì„ ì 용하면 "PUBLİC"ì´ ë˜ì–´ ê²°êµ ì˜ë„í–ˆë˜ "PUBLIC"과는 다른 ê°’ì´ ë˜ëŠ” ë¬¸ì œê°€ ë°œìƒí•œë‹¤. ë˜í•œ, 시스템 ë°ì´í„°ë¥¼ 위한 "알파벳"ì€ ì„œë¡œ 다른 ë¡œìº˜ì„ ê°€ì§„ ë°ì´í„°ë² ì´ìФ ê°„ì— í˜¸í™˜ì„± ì œê³µì„ ìœ„í•´ì„œë„ í•„ìš”í•˜ë‹¤. ì´ë¡œ ì¸í•´ 서로 다른 로캘 사ì´ì— ë°ì´í„°ë² ì´ìŠ¤ì˜ ìŠ¤í‚¤ë§ˆì™€ ë°ì´í„°ë¥¼ 언로드-로드하는 ê²ƒì´ ê°€ëŠ¥í•´ì§„ë‹¤. 문ìžì—´ ë¦¬í„°ëŸ´ì˜ ìž…ì¶œë ¥ ---------------------- 문ìžì—´ 리터럴 ë°ì´í„°ëŠ” CUBRIDì— ë‹¤ì–‘í•œ 방법으로 ìž…ë ¥ëœë‹¤. * C API interface (CCI) * 언어 ì˜ì¡´ì ì¸ ì¸í„°íŽ˜ì´ìФ. JDBC, Perl 드ë¼ì´ë²„ 등 * CSQL - 콘솔 ë˜ëŠ” 파ì¼ë¡œë¶€í„° ìž…ë ¥ 드ë¼ì´ë²„를 통해 ë¬¸ìž ë°ì´í„°ë¥¼ ë°›ì„ ë•Œ, CUBRID는 ì´ ë¬¸ìžë“¤ì˜ 문ìžì…‹ì„ ì¸ì§€í• 수 없다. 문ìžì—´ 리터럴(따옴표로 ê°ì‹¼ 문ìž)ì— í•´ë‹¹í•˜ëŠ” ëª¨ë“ í…스트 ë°ì´í„°ëŠ” 있는 그대로(raw data) 다루어진다. 문ìžì…‹ 메타 ì •ë³´ëŠ” ì‘ìš© í´ë¼ì´ì–¸íŠ¸ì— ì˜í•´ ì œê³µë˜ì–´ì•¼ 한다. í´ë¼ì´ì–¸íŠ¸ëŠ” :ref:`set-names-stmt`\ ì´ë‚˜ :ref:`charset-introducer` 를 통해 문ìžì…‹ ì •ë³´ë¥¼ ì œê³µí• ìˆ˜ 있다. CSQLì„ ìœ„í•œ í…스트 변환 ^^^^^^^^^^^^^^^^^^^^^^^ CSQL 콘솔 ì¸í„°íŽ˜ì´ìФì—서는 í…스트 변환 ë™ìž‘ì´ ì¼ì–´ë‚ 수 있다. ëŒ€ë¶€ë¶„ì˜ ë¡œìº˜ë“¤ì—는 콘솔ì—서 ASCII 문ìžê°€ 아닌 문ìžë¥¼ 쉽게 쓸 수 있ë„ë¡ í•´ì£¼ëŠ” 문ìžì…‹ì´ 별ë„로 존재한다. 예를 들어 로캘 tr_TR.utf8ì— ëŒ€í•œ LDML 파ì¼ì—는 ë‹¤ìŒ ë¼ì¸ì´ í¬í•¨ë˜ì–´ 있다. :: <consoleconversion type="ISO88599" windows_codepage="28599" linux_charset="iso88599,ISO_8859-9,ISO8859-9,ISO-8859-9" /> 사용ìžê°€ ì´ì™€ ê°™ì´ ì½˜ì†”ì˜ ë¬¸ìžì…‹ì„ ì„¤ì •í•˜ë©´(예: Windowsì—서 chcp 28599, Linuxì—서 export LANG=tr_TR.iso88599), ëª¨ë“ ìž…ë ¥ì´ ISO-8859-9 문ìžì…‹ìœ¼ë¡œ ì¸ì½”딩ëœë‹¤ê³ ê°€ì •í•˜ê³ ëª¨ë“ ë°ì´í„°ë¥¼ UTF-8로 변환한다. ë˜í•œ 결과를 ì¶œë ¥í• ë•ŒëŠ” 반대로 UTF-8ì„ ISO-8859-9로 변환한다. Linuxì—서는 ì´ëŸ¬í•œ ë³€í™˜ì„ í”¼í•˜ê¸° 위해 UTF-8 콘솔(예: export LANG=tr_TR.utf8)ì„ ì§ì ‘ ì‚¬ìš©í• ê²ƒì„ ê¶Œìž¥í•œë‹¤. LDML 로캘 파ì¼ì—서 ì´ XML 태그 ì„¤ì •ì€ ë°˜ë“œì‹œ 요구ë˜ì§€ëŠ” 않으며 ì„ íƒ ì‚¬í•ì´ë‹¤. 예를 들어, 로캘 km_KH.utf8ì€ ê´€ë ¨ 코드 페ì´ì§€ê°€ 없다. **프랑스어 ì„¤ì • ë° í”„ëž‘ìŠ¤ì–´ ë¬¸ìž ìž…ë ¥ì„ ìœ„í•œ ì„¤ì • 예** 프랑스어 ì„¤ì •ì„ í•˜ë ¤ë©´ ë¨¼ì € cubrid_locales.txt 파ì¼ì— fr_FRì„ ì„¤ì •í•˜ê³ , ë¡œìº˜ì„ ì»´íŒŒì¼(:ref:`locale-setting` ì°¸ê³ )한 후 DB ìƒì„± 시 ë¡œìº˜ì„ fr_FR.utf8ì„ ì„¤ì •í•´ì•¼ 한다. Linuxì—서는 다ìŒê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. * ì½˜ì†”ì´ UTF-8ì„ ìž…ë ¥ë°›ì„ ìˆ˜ 있ë„ë¡ LANG=fr_FR.utf8 ë˜ëŠ” en_US.utf8로 ì„¤ì •í•œë‹¤. ì´ ì„¤ì •ì€ í”„ëž‘ìŠ¤ì–´ ë¬¸ìž ë¿ë§Œ ì•„ë‹ˆë¼ ëª¨ë“ UTF-8 문ìžë¥¼ ìž…ë ¥ë°›ì„ ìˆ˜ 있게 한다. * ë˜ëŠ” ì½˜ì†”ì´ ISO-8859-15를 ìž…ë ¥ë°›ì„ ìˆ˜ 있ë„ë¡ LANG=fr_FR.iso885915로 ì„¤ì •í•˜ê³ , LDML 파ì¼ì˜ <consoleconversion> 태그ì—서 linux_charset="iso885915"로 ì„¤ì •í•œë‹¤. ì´ì™€ ê°™ì´ ì„¤ì •í•˜ë©´ ISO-8859-15 문ìžë§Œì„ ìž…ë ¥ë°›ì•„ CSQLì— ì˜í•´ UTF-8로 변환ë 것ì´ë‹¤. Windowsì—서는 다ìŒê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. * Windows 코드페ì´ì§€ë¥¼ 28605로 변환한다(ëª…ë ¹ 프롬프트ì—서 chcp 28605). LDML <consoleconversion> 태그ì—서 set windows_codepage="28605"로 ì„¤ì •í•œë‹¤. 코드페ì´ì§€ 28605는 ISO-8859-15 문ìžì…‹ì— 해당한다. **루마니아어 ì„¤ì • ë° ë£¨ë§ˆë‹ˆì•„ì–´ ë¬¸ìž ìž…ë ¥ì„ ìœ„í•œ ì„¤ì • 예** 루마니아어 ì„¤ì •ì„ í•˜ë ¤ë©´ ë¨¼ì € cubrid_locales.txt 파ì¼ì— ro_RO를 ì„¤ì •í•˜ê³ , ë¡œìº˜ì„ ì»´íŒŒì¼(:ref:`locale-setting` ì°¸ê³ )한 후 DB ìƒì„± 시 ë¡œìº˜ì„ ro_RO.utf8ì„ ì„¤ì •í•´ì•¼ 한다. Linuxì—서는 다ìŒê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. * ì½˜ì†”ì´ UTF-8ì„ ìž…ë ¥ë°›ì„ ìˆ˜ 있ë„ë¡ LANG=ro_RO.utf8 ë˜ëŠ” en_US.utf8로 ì„¤ì •í•œë‹¤. ì´ ì„¤ì •ì€ ë£¨ë§ˆë‹ˆì•„ì–´ ë¬¸ìž ë¿ë§Œ ì•„ë‹ˆë¼ ëª¨ë“ UTF-8 문ìžë¥¼ ìž…ë ¥ë°›ì„ ìˆ˜ 있게 한다. * ë˜ëŠ” ì½˜ì†”ì´ ISO-8859-2를 ìž…ë ¥ë°›ì„ ìˆ˜ 있ë„ë¡ LANG=ro_RO.iso88592로 ì„¤ì •í•œë‹¤. LDML 파ì¼ì˜ <consoleconversion> 태그ì—서 linux_charset="iso88592"로 ì„¤ì •í•œë‹¤. ì´ì™€ ê°™ì´ ì„¤ì •í•˜ë©´ ISO-8859-2 문ìžë§Œì„ ìž…ë ¥ë°›ì•„ CSQLì— ì˜í•´ UTF-8로 변환ë 것ì´ë‹¤. Windowsì—서는 다ìŒê³¼ ê°™ì´ ì„¤ì •í•œë‹¤. * Windows 코드페ì´ì§€ë¥¼ 1250으로 변환한다(ëª…ë ¹ 프롬프트ì—서 chcp 1250). LDML <consoleconversion> 태그ì—서 set windows_codepage="1250"로 ì„¤ì •í•œë‹¤. 코드페ì´ì§€ 1250ì€ ISO-8859-2 문ìžì…‹ì— 해당하며, 루마니아어를 í¬í•¨í•˜ëŠ”, ì¤‘ìœ ëŸ½ê³¼ ë™ìœ 럽 언어들 ì¼ë¶€ì— íŠ¹í™”ëœ ë¬¸ìžì…‹ì´ë‹¤. 코드페ì´ì§€ 1250 ì™¸ì˜ ë¬¸ìžëŠ” ì œëŒ€ë¡œ ì¶œë ¥ë˜ì§€ 않ìŒì— ìœ ì˜í•œë‹¤. 루마니아 ì•ŒíŒŒë²³ì— ì¡´ìž¬í•˜ëŠ” 특수 문ìž(예: ë¬¸ìž ì•„ëž˜ì— ì„¸ë”œë¼(cedilla)ê°€ 있는 "S"와 "T")를 사용하기 위해서는 Windowsì˜ "ì œì–´íŒ"ì„ í†µí•´ 루마니아어(ë ˆê±°ì‹œ)로 키보드 ì„¤ì •ì„ ë³€ê²½í•´ì•¼ 한다. * ISO8859-2는 코드페ì´ì§€ 1250ì— ì—†ëŠ” 문ìžë¥¼ ì¼ë¶€ í¬í•¨í•˜ê³ 있으므로, ISO8859-2ì˜ ëª¨ë“ ë¬¸ìžë¥¼ CSQL로 ìž…ë ¥í•˜ê±°ë‚˜ ì¶œë ¥í• ìˆ˜ëŠ” 없다. ìž…ë ¥ 시 콘솔 변환 프로세스는 SQL ë¬¸ìž¥ì„ í¬í•¨í•œ ëª¨ë“ ìž…ë ¥ì— ëŒ€í•´ ë³€í™˜ì´ í•„ìš”í•œ ë¬¸ìž ë°ì´í„°ë“¤ì„ 변환한다. ê²°ê³¼ ì¶œë ¥ê³¼ ì—러 메시지 ì¶œë ¥ ì‹œì— CSQLì€ ëª¨ë“ í…스트를 변환하지 ì•Šê³ ë³€í™˜ì´ í•„ìš”í•œ 문ìžë“¤ë§Œ 변환한다. 예를 들어, ìˆ«ìž í…ìŠ¤íŠ¸ë“¤ì€ ëª¨ë‘ ASCII 문ìžì´ë¯€ë¡œ ì´ë¥¼ ì¶œë ¥í• ë•ŒëŠ” 콘솔 변환 ìž‘ì—…ì´ ë°œìƒí•˜ì§€ 않는다. .. _unicode-normalization: ìœ ë‹ˆì½”ë“œ ì •ê·œí™” ^^^^^^^^^^^^^^^ 글리프(glyph [#f1]_ , ë¬¸ìž ê¸°í˜¸)는 ìœ ë‹ˆì½”ë“œ 문ìžë¥¼ 사용해서 다양한 방법으로 사용ëœë‹¤. 대부분 ë¶„í•´(decomposed)ëœ í˜•íƒœì™€ ê²°í•©(composed form)ëœ í˜•íƒœë¡œ 사용ëœë‹¤. 예를 들어, 글리프 'Ä'는 ë‹¨ì¼ ì½”ë“œí¬ì¸íЏ 00C4로 ê²°í•©ëœ í˜•íƒœë¡œ ì“°ì´ëŠ”ë°, UTF-8ì—서 "C3 84"와 ê°™ì´ 2 ë°”ì´íŠ¸ë¡œ 표현ëœë‹¤. ì™„ì „ížˆ ë¶„í•´ëœ í˜•íƒœì—서 2 ê°œì˜ ì½”ë“œ í¬ì¸íЏ 0041('A')ê³¼ 0308(COMBINING DIAERESIS)로 쓰여지며, UTF-8ì—서 "41 CC 88"ê³¼ ê°™ì´ 3 ë°”ì´íŠ¸ë¡œ 표현ëœë‹¤. ëŒ€ë¶€ë¶„ì˜ í…스트 편집기는 ë‘ ê°€ì§€ 형ì‹ì„ ëª¨ë‘ ë‹¤ë£° 수 있어서, ë‘ ê°€ì§€ 형ì‹ì˜ ì¸ì½”ë”©ì€ ê°™ì€ ê¸€ë¦¬í”„ 'Ä'로 ë‚˜íƒ€ë‚ ê²ƒì´ë‹¤. ë‚´ë¶€ì 으로 CUBRID는 "ì™„ì „ížˆ ê²°í•©ëœ" í…ìŠ¤íŠ¸ë§Œì„ ì²˜ë¦¬í• ìˆ˜ 있다. "ì™„ì „ížˆ ë¶„í•´ëœ" í…스트로 작업하는 í´ë¼ì´ì–¸íŠ¸ì— ëŒ€í•´ CUBRID는 "ì™„ì „ížˆ ê²°í•©ëœ" í…스트로 ë³€í™˜í•˜ê³ ëŒë ¤ì¤„ 때는 "ì™„ì „ížˆ ë¶„í•´ëœ" í…스트로 변환하ë„ë¡ ì„¤ì •ë 수 있다. ì •ê·œí™”ëŠ” ë¡œìº˜ì— ëŒ€í•œ ê¸°ëŠ¥ì´ ì•„ë‹ˆë©°, ë”°ë¼ì„œ ë¡œìº˜ì— ì˜ì¡´í•˜ì§€ 않는다. 시스템 파ë¼ë¯¸í„° **unicode_input_normalization** 는 ê²°í•© 여부를 ì„¤ì •í•˜ë©°, 시스템 파ë¼ë¯¸í„° **unicode_output_normalization**\ 는 ë¶„í•´ 여부를 ì„¤ì •í•œë‹¤. 보다 ìžì„¸í•œ ë‚´ìš©ì€ :ref:`unicode_input_normalization <unicode_input_normalization>`\ ì„ ì°¸ê³ í•œë‹¤. ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ë¶„í•´ëœ ìœ ë‹ˆì½”ë“œë§Œì„ ë‹¤ë£° 수 있는 경우ì—는 **unicode_input_normalization**\ ê³¼ **unicode_output_normalization**\ ì„ ëª¨ë‘ yes로 ì„¤ì •í•˜ëŠ” 경우를 사용해야 í•˜ê³ , ë¶„í•´ëœ í˜•íƒœì™€ ê²°í•©ëœ í˜•íƒœë¥¼ ëª¨ë‘ ë‹¤ë£° 수 있는 경우ì—는 **unicode_input_normalization** = yes\ 와 **unicode_output_normalization** = no 로 ì„¤ì •í•˜ì—¬ ì‚¬ìš©í• ìˆ˜ 있다. .. _collation-cont-exp: ì½œë ˆì´ì…˜ì˜ 축약과 확장 ---------------------- ì½œë ˆì´ì…˜ì˜ êµ¬ì¶•ì„ ìœ„í•´ 축약(contraction)ê³¼ 확장(expansion)ì„ ì§€ì›í•˜ë©°, 축약과 í™•ìž¥ì€ UTF-8 문ìžì…‹ ì½œë ˆì´ì…˜ì—서만 가능하다. ì´ëŸ¬í•œ 축약과 í™•ìž¥ì€ LDML 파ì¼ì˜ ì½œë ˆì´ì…˜ ì„¤ì •ì—서 ì •ì˜í• 수 있는ë°, ì´ë“¤ì˜ ì‚¬ìš©ì€ ë¡œìº˜ ë°ì´í„°(ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬)ì˜ í¬ê¸°ì™€ ì„œë²„ì˜ ì„±ëŠ¥ 모ë‘ì— ì˜í–¥ì„ 준다. .. _contraction: 축약 ^^^^ ì¶•ì•½ì€ ë‘˜ ë˜ëŠ” ê·¸ ì´ìƒì˜ 코드í¬ì¸íŠ¸ë¡œ ì´ë£¨ì–´ì§„ ì¼ë ¨ì˜ 문ìžë“¤ì„ í•˜ë‚˜ì˜ ë¬¸ìžë¡œ 간주하여 ì •ë ¬í• ìˆ˜ 있ë„ë¡ í•´ì£¼ëŠ” ì¼ë ¨ì˜ 시퀀스들로 구성ëœë‹¤. 예를 들어, ì „í†µì ì¸ ìŠ¤íŽ˜ì¸ì–´ ì •ë ¬ 순서ì—서 "ch"는 í•˜ë‚˜ì˜ ë¬¸ìžë¡œ 간주ëœë‹¤. "ch"로 시작하는 ëª¨ë“ ë‹¨ì–´ë“¤ì€ "c"로 시작하는 ëª¨ë“ ë‹¨ì–´ë“¤ ë’¤ì— ì •ë ¬ë˜ì§€ë§Œ, "d"로 시작하는 단어보다 ì•žì— ìœ„ì¹˜í•œë‹¤. ì¶•ì•½ì˜ ë‹¤ë¥¸ 예는 ì²´ì½”ì–´ì˜ "ch"ì¸ë° "h" ë’¤ì— ì •ë ¬ë˜ë©°, í¬ë¡œì•„티아어와 ì„¸ë¥´ë¹„ì•„ì–´ì˜ ë¼í‹´ 문ìžì—서 "lj"와 "nj"는 ê°ê° "l"ê³¼ "n" ë’¤ì— ì •ë ¬ëœë‹¤. ì¶•ì•½ì— ëŒ€í•œ 추가 ì •ë³´ëŠ” http://userguide.icu-project.org/collation/concepts\ 를 ì°¸ê³ í•œë‹¤. http://www.unicode.org/Public/UCA/latest/allkeys.txt\ ì˜ DUCETì—ë„ ì¶•ì•½ì— ëŒ€í•´ ì¼ë¶€ê°€ ì •ì˜ë˜ì–´ 있다. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ê³¼ í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ 모ë‘ì— ëŒ€í•´ ì¶•ì•½ì„ ì§€ì›í•œë‹¤. ì½œë ˆì´ì…˜ì„ ì •ì˜í•˜ëŠ” <setting> 태그ì—서 **DUCETContractions="ignore/use"** 와 **TailoringContractions="ignore/use"** ë‘ ê°œì˜ LDML 파ë¼ë¯¸í„°ë¥¼ 통해서 ì„¤ì •í• ìˆ˜ 있다. DUCETContractions 파ë¼ë¯¸í„°ëŠ” DUCET 파ì¼ì— 있는 ì¶•ì•½ì„ ì½œë ˆì´ì…˜ì— ë¡œë”©í• ê²ƒì¸ì§€ë¥¼ ê²°ì •í•˜ë©°, TailoringContractions 파ë¼ë¯¸í„°ëŠ” LDML 파ì¼ì˜ ê·œì¹™ì— ì˜í•´ ì •ì˜ëœ ì¶•ì•½ì„ ì‚¬ìš©í• ê²ƒì¸ì§€ë¥¼ ê²°ì •í•œë‹¤. .. _expansion: 확장 ^^^^ í™•ìž¥ì€ í•˜ë‚˜ì˜ ì½œë ˆì´ì…˜ ì›ì†Œë³´ë‹¤ ë§Žì€ ì›ì†Œë“¤ì„ 가진 코드í¬ì¸íЏ(문ìž)ë“¤ì„ ì°¸ì¡°í•œë‹¤. í™•ìž¥ì„ ì‚¬ìš©í•˜ë©´ ì•„ëž˜ì— ì„œìˆ ëœ ë°”ì™€ ê°™ì´ ì½œë ˆì´ì…˜ì˜ ë™ìž‘ì´ ê·¼ë³¸ì 으로 변경ëœë‹¤. LDML 파ì¼ì˜ CUBRIDExpansions="use" 파ë¼ë¯¸í„° ì„¤ì •ì„ í†µí•´ í™•ìž¥ì„ ì‚¬ìš©í• ìˆ˜ 있다. **í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜** í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì—서 ê° ì½”ë“œí¬ì¸íŠ¸ëŠ” 개별ì 으로 처리ëœë‹¤. ì½œë ˆì´ì…˜ì˜ ì„¸ê¸°ì— ê¸°ë°˜í•˜ì—¬ 문ìžë“¤ì´ ì™„ì „ížˆ ì •ë ¬ë ìˆ˜ë„ ìžˆê³ ê·¸ë ‡ì§€ ì•Šì„ ìˆ˜ë„ ìžˆë‹¤. ì½œë ˆì´ì…˜ ì•Œê³ ë¦¬ì¦˜ì€ ê° ìˆ˜ì¤€ë“¤ì˜ ì§‘í•©ì˜ ê°€ì¤‘ì¹˜ë¥¼ 비êµí•˜ì—¬ 해당 코드í¬ì¸íŠ¸ì˜ ê°€ì¤‘ì¹˜ë¥¼ 나타내는 í•˜ë‚˜ì˜ ê°’ì„ ìƒì„±í•˜ë©°, ì´ë¥¼ 기반으로 코드í¬ì¸íŠ¸ë“¤ì„ ì •ë ¬í•œë‹¤. í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì—서 ë‘ ë¬¸ìžì—´ 비êµëŠ” ì´ì™€ ê°™ì´ ê³„ì‚°ëœ ê°€ì¤‘ì¹˜ë¡œ ê°ê°ì˜ 코드í¬ì¸íŠ¸ë¥¼ 차례로 비êµí•˜ê²Œ ëœë‹¤. **í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜** í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì—서 ì¼ë¶€ ê²°í•© 문ìž(코드í¬ì¸íЏ)ë“¤ì€ ë‹¤ë¥¸ 문ìžë“¤ë¡œ êµ¬ì„±ëœ ìˆœì„œ 있는 리스트(ordered list)로 í•´ì„ëœë‹¤. 예를 들어, 'æ'는 'ae', 'ä'는 'ae' ë˜ëŠ” 'aa'와 ê°™ì´ í•´ì„ëœë‹¤. DUCETì—서 'æ'ì˜ ì½œë ˆì´ì…˜ ì›ì†Œ 리스트는 'a'와 'e'ì˜ ìˆœì„œë¡œ ë‘ ì½œë ˆì´ì…˜ ì›ì†Œ ë¦¬ìŠ¤íŠ¸ë“¤ì„ ì—°ê²°(concatenation)한 ê²ƒì´ ëœë‹¤. 코드í¬ì¸íŠ¸ì— ëŒ€í•´ íŠ¹ì •í•œ 순서를 부여하는 ê²ƒì€ ë¶ˆê°€ëŠ¥í•˜ë©°, ê° ë¬¸ìž(코드í¬ì¸íЏ)ë“¤ì˜ ìƒˆë¡œìš´ 가중치를 계산하는 ê²ƒë„ ë¶ˆê°€ëŠ¥í•˜ë‹¤. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì—서 문ìžì—´ 비êµëŠ” ë‘ ê°œì˜ ì½”ë“œí¬ì¸íЏ/ì¶•ì•½ì— ëŒ€í•´ ì½œë ˆì´ì…˜ ì›ì†Œë“¤ì„ ì—°ê²°(concatenation)한 후ì—, ê° ë‹¨ê³„ë³„ë¡œ ë‘ ë¦¬ìŠ¤íŠ¸ì˜ ê°€ì¤‘ì¹˜ë¥¼ 비êµí•˜ëŠ” 것ì´ë‹¤. **ì˜ˆì œ 1** 다ìŒì˜ ì˜ˆì œëŠ” ì½œë ˆì´ì…˜ ì„¤ì •ì— ë”°ë¼ ë¬¸ìžì—´ 비êµê°€ 다른 결과를 ê°€ì ¸ì˜¬ 수 있다는 ê²ƒì„ ë³´ì—¬ì¤€ë‹¤. 다ìŒì˜ DUCET íŒŒì¼ ì¼ë¶€ëŠ” 아래 예ì—서 ì‚¬ìš©í• ì½”ë“œí¬ì¸íŠ¸ë“¤ì´ë‹¤. :: 0041 ; [.15A3.0020.0008.0041] # LATIN CAPITAL LETTER A 0052 ; [.1770.0020.0008.0052] # LATIN CAPITAL LETTER R 0061 ; [.15A3.0020.0002.0061] # LATIN SMALL LETTER A 0072 ; [.1770.0020.0002.0072] # LATIN SMALL LETTER R 00C4 ; [.15A3.0020.0008.0041][.0000.0047.0002.0308] # LATIN CAPITAL LETTER A WITH DIAERESIS; 00E4 ; [.15A3.0020.0002.0061][.0000.0047.0002.0308] # LATIN SMALL LETTER A WITH DIAERESIS; ì½œë ˆì´ì…˜ì„ 위해 세 가지 ì„¤ì • 타입으로 표현ëœë‹¤. * 첫 번째 세기(primary strength), ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ì—†ìŒ (단계 1) * ë‘ ë²ˆì§¸ 세기(secondary strength), ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ì—†ìŒ (단계 1, 2) * 세 번째 세기(tertiary strength), ëŒ€ë¬¸ìž ìš°ì„ (단계 1, 2, 3) 지금부터 í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ê³¼ í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì„ ê°€ì§€ê³ ë¬¸ìžì—´ ''Ar''ê³¼ ''Är''ì˜ ì •ë ¬ì„ ì‚´íŽ´ë³¼ 것ì´ë‹¤. **í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜** í™•ìž¥ì´ ì—†ì„ ë•Œ ê° ì½”ë“œí¬ì¸íŠ¸ëŠ” í•˜ë‚˜ì˜ ê°€ì¤‘ì¹˜ ê°’ì„ ë¶€ì—¬ë°›ëŠ”ë‹¤. A, Ä, Rê³¼ 해당 ì†Œë¬¸ìž ì½”ë“œí¬ì¸íŠ¸ì— ëŒ€í•œ 가중치를 위ì—서 ì–¸ê¸‰ëœ ì•Œê³ ë¦¬ì¦˜ì„ ê¸°ë°˜ìœ¼ë¡œ 한 ì´ ë¬¸ìžë“¤ì— 대한 코드í¬ì¸íŠ¸ì˜ ìˆœì„œëŠ” 다ìŒê³¼ 같다. * 첫 번째 세기: A = Ä < R = r * ë‘ ë²ˆì§¸ 세기: A < Ä < R = r * 세 번째 세기: A < Ä < R < r ê° ì½”ë“œí¬ì¸íŠ¸ì— ëŒ€í•´ ê³„ì‚°ëœ ê°€ì¤‘ì¹˜ê°€ 있기 ë•Œë¬¸ì— ë¬¸ìžì—´ë“¤ì˜ ì •ë ¬ 순서는 쉽게 ê²°ì •ëœë‹¤. * 첫 번째 세기: "Ar" = "Är" * ë‘ ë²ˆì§¸ 세기: "Ar" < "Är" * 세 번째 세기: "Ar" < "Är" **í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜** í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì´ë©´ ì •ë ¬ 순서가 ë°”ë€ë‹¤. DUCETì— ê¸°ë°˜í•œ ì½œë ˆì´ì…˜ ì›ì†Œë“¤ì˜ ì—°ê²°ëœ ë¦¬ìŠ¤íŠ¸ë“¤ì€ ë‹¤ìŒê³¼ 같다. :: Ar [.15A3.0020.0008.0041][.1770.0020.0002.0072] Är [.15A3.0020.0008.0041][.0000.0047.0002.0308][.1770.0020.0002.0072] 수준 1ì˜ ì²« 번째 ê³¼ì •ì—서 가중치 0x15A3ê³¼ 0x15A3ì´ ë¹„êµëœë‹¤. ë‘ ë²ˆì§¸ ê³¼ì •ì—서 가중치 0x0000ì€ ë¹„êµê°€ ìƒëžµë˜ê³ , 0x1770ê³¼ 0x1770ì´ ë¹„êµëœë‹¤. 여기까지 문ìžì—´ì´ ë™ì¼í•˜ë¯€ë¡œ 수준 2 가중치로 ê³„ì† ë¹„êµí•˜ê²Œ ë˜ëŠ”ë°, 첫 번째 ê³¼ì •ì—서 0x0020ì„ 0x0020ê³¼ 비êµí•˜ê³ ë‘ ë²ˆì§¸ ê³¼ì •ì—서 0x0020ì„ 0x0047ê³¼ 비êµí•˜ì—¬ "Ar" < "Är"ì´ë¼ëŠ” 결과를 ìƒì„±í•œë‹¤. ì´ ì˜ˆì œë¥¼ 통해 í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì„ ì‚¬ìš©í• ë•Œ 어떻게 문ìžì—´ 비êµê°€ 수행ë˜ëŠ”ì§€ 살펴보았다. ì´ì œ ì½œë ˆì´ì…˜ ì„¤ì •ì„ ë…ì¼ì–´ ì½œë ˆì´ì…˜ìœ¼ë¡œ 변경하여 ê°™ì€ ë¬¸ìžì—´ì— 대해 다른 순서로 ì •ë ¬ë˜ëŠ” ê³¼ì •ì„ ì‚´íŽ´ë³´ìž. ë…ì¼ì–´ì—서 "Ä"는 ë¬¸ìž ê·¸ë£¹ "AE"로 í•´ì„ëœë‹¤. ì´ ì˜ˆì— í•´ë‹¹í•˜ëŠ” 코드í¬ì¸íŠ¸ì™€ ì½œë ˆì´ì…˜ ì›ì†Œë“¤ì€ 다ìŒê³¼ 같다. :: 0041 ; [.15A3.0020.0008.0041] # LATIN CAPITAL LETTER A 0045 ; [.15FF.0020.0008.0045] # LATIN CAPITAL LETTER E 0072 ; [.1770.0020.0002.0072] # LATIN SMALL LETTER R 00C4 ; [.15A3.0020.0008.0041][.15FF.0020.0008.0045] # LATIN CAPITAL LETTER A WITH DIAERESIS; EXPANSION 문ìžì—´ "Ar"ê³¼ "Är"ì„ ë¹„êµí• 때 í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì„ 사용하면, ë‘ ë¬¸ìžì—´ì— 있는 문ìžë“¤ì˜ ì½œë ˆì´ì…˜ ì›ì†Œ 리스트를 결합한 후 비êµí•˜ëŠ” ê³¼ì •ì´ í¬í•¨ëœë‹¤. :: Ar [.15A3.0020.0008.0041][.1770.0020.0002.0072] Är [.15A3.0020.0008.0041][.15FF.0020.0008.0045][.1770.0020.0002.0072] 첫 번째 ê³¼ì •ì—서 수준 1ì˜ ê°€ì¤‘ì¹˜ 0x15A3ê³¼ 0x15A3를 비êµí•œë‹¤. ê·¸ë¦¬ê³ ë‚˜ì„œ 0x1770ê³¼ 0x15FF를 비êµí•˜ì—¬ "Ar" > "Är"ì´ë¼ëŠ” 결과가 나오는ë°, ì´ëŠ” ì•žì˜ ì˜ˆì œì™€ëŠ” ì „í˜€ 다른 ê²°ê³¼ì´ë‹¤. **ì˜ˆì œ 2** ìºë‚˜ë‹¤ í”„ëž‘ìŠ¤ì–´ì˜ í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜(utf8_fr_exp_ab)ì—서는 액센트 문ìžë¥¼ 뒤쪽ì—서 앞쪽 방향으로 비êµí•˜ì—¬ ì •ë ¬í•œë‹¤. * ì¼ë°˜ì ì¸ ì•¡ì„¼íŠ¸ 순서: cote < coté < côte < côté * ì—순 액센트 순서: cote < côte < coté < côté .. _operations-charset-collation: 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ 필요로 하는 ì—°ì‚° ------------------------------------ 문ìžì…‹ ^^^^^^ 문ìžì…‹ ì •ë³´ëŠ” 문ìžì—´ ë°ì´í„°ë¥¼ 사용하는 ì—°ì‚°ìžì™€ 함수들ì—게 필요한 ì •ë³´ì´ë‹¤. 하지만 예외ì 으로, :func:`OCTET_LENGTH` 함수와 :func:`BIT_LENGTH` 함수는 ë°”ì´íŠ¸ì™€ 비트 ê°’ì„ ë°˜í™˜í•˜ê¸° 위해 문ìžì…‹ ì •ë³´ê°€ 불필요하다. 그러나, 다른 문ìžì…‹ìœ¼ë¡œ ì €ìž¥ëœ ê°™ì€ ê¸€ë¦¬í”„(glyph, ë¬¸ìž ê¸°í˜¸)ì— ëŒ€í•´ ì´ í•¨ìˆ˜ë“¤ì„ ìˆ˜í–‰í•˜ë©´ 다른 ê°’ì„ ë°˜í™˜í•œë‹¤. .. code-block:: sql CREATE TABLE t (s_iso STRING CHARSET iso88591, s_utf8 STRING CHARSET utf8); SET NAMES iso88591; INSERT INTO t VALUES ('È','È'); -- the first returns 1, while the second does 2 SELECT OCTET_LENGTH(s_iso), OCTET_LENGTH(s_utf8) FROM t; ìœ„ì˜ ì˜ˆëŠ” 콘솔(ë˜ëŠ” ì‘ìš© í´ë¼ì´ì–¸íЏ)ì—서 iso88591 문ìžì…‹ìœ¼ë¡œ 질ì˜ë¥¼ ìž…ë ¥í•´ì•¼ 한다. ì½œë ˆì´ì…˜ ^^^^^^^^ ì½œë ˆì´ì…˜ì€ :func:`STRCMP`, :func:`POSITION`, LIKE ì¡°ê±´, <, =, > 등 ë‘ ë¬¸ìžì—´ ê°„ì˜ ë¹„êµ ë˜ëŠ” 매ì¹ì„ 수반하는 ì—°ì‚°ìžì™€ 함수ì—서 필요하다. ë˜í•œ ORDER BY, GROUP BY ë° ì§‘ê³„ 함수(:func:`MIN`, :func:`MAX`, :func:`GROUP_CONCAT`) 등ì—ì„œë„ ì½œë ˆì´ì…˜ì´ 필요하다. ì½œë ˆì´ì…˜ì€ ë˜í•œ :func:`UPPER`, :func:`LOWER` 함수ì—ì„œë„ ê³ ë ¤ë˜ëŠ”ë°, 다ìŒê³¼ ê°™ì´ ë™ìž‘한다. * ê° ì½œë ˆì´ì…˜ì€ ë¶€ëª¨ì— í•´ë‹¹í•˜ëŠ” 기본 ë¡œìº˜ì´ ìžˆë‹¤. * UPPER와 LOWER 함수는 ì½œë ˆì´ì…˜ì˜ 기본 ë¡œìº˜ì„ ì‚¬ìš©í•˜ì—¬ 수행ëœë‹¤. ëŒ€ë¶€ë¶„ì˜ ì½œë ˆì´ì…˜ì—서 기본 ë¡œìº˜ì€ ëª…í™•í•˜ë‹¤(ì½œë ˆì´ì…˜ ì´ë¦„ì— í¬í•¨ë¨). * utf8_tr_cs → tr_TR.utf8 * iso88591_en_ci → en_US (ISO-8859-1 문ìžì…‹) ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì€ 다ìŒì˜ 기본 ë¡œìº˜ì„ ê°€ì§€ê³ ìžˆë‹¤. * iso88591_bin → en_US (ISO-8859-1 문ìžì…‹) * utf8_bin (en_US.utf8 - ë‚´ìž¥ëœ ë¡œìº˜ - ASCII 문ìžë§Œ 다룬다) * euckr_bin (ko_KR.euckr - ë‚´ìž¥ëœ ë¡œìº˜ - ASCII 문ìžë§Œ 다룬다) LDMLì—서 ì •ì˜í•œ ì¼ë°˜ì ì¸(generic) ì½œë ˆì´ì…˜ë“¤ì´ 있는ë°, ì´ ì½œë ˆì´ì…˜ë“¤ì€ **$CUBRID/conf/cubrid_locales.txt** 파ì¼ì—서 ë¨¼ì € 나타나는 ë¡œìº˜ì„ ê¸°ë³¸ 로캘로 가진다. 최초 설치 시 가장 처ìŒì— 나타나는 ë¡œìº˜ì€ de_DE(ë…ì¼ì–´)ì´ë¯€ë¡œ, de_DEê°€ ì¼ë°˜ì ì¸ ì½œë ˆì´ì…˜ì˜ 기본 ë¡œìº˜ì´ ëœë‹¤. 문ìžì…‹ 변환 ^^^^^^^^^^^ CUBRIDê°€ ì§€ì›í•˜ëŠ” 3 가지 문ìžì…‹ì— 대한 변환 ê·œì¹™ì€ ë‹¤ìŒê³¼ 같다. * ì¼ë°˜ì ì¸ ê·œì¹™ì€ ë¬¸ìž íŠ¸ëžœìŠ¤ì½”ë”©((ë°”ì´íŠ¸ì˜ í‘œí˜„ì´ ëŒ€ìƒ ë¬¸ìžì…‹ìœ¼ë¡œ 표현ë¨)ì´ ë°œìƒí•˜ëŠ” 것ì´ë‹¤ - VARCHAR ë¬¸ìž ë°ì´í„°ì—서 문ìžì˜ 길ì´(precision)는 ìœ ì§€ë˜ëŠ” 반면, ë°”ì´íЏ í¬ê¸°ëŠ” 바뀔 수 있다. ê³ ì • ê¸¸ì´ ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ì„ 바꿀 때(ALTER..CHANGE), ë°”ì´íЏ í¬ê¸°ëŠ” í•ìƒ ë°”ë€ë‹¤. (í¬ê¸° = ê¸¸ì´ x 문ìžì…‹ì—서 ë¬¸ìž í•˜ë‚˜ê°€ 차지하는 ë°”ì´íЏ í¬ê¸°) * 예외 ê·œì¹™ì€ utf8ê³¼ euckrì—서 iso88591로 변환하는 것ì¸ë°, 길ì´ëŠ” ìœ ì§€ë˜ì§€ë§Œ ë°ì´í„°ëŠ” 잘릴 수 있다. 다ìŒì€ DB ìƒì„± 시 ì§€ì •í•œ ë¡œìº˜ì´ en_US(.iso88591)ì¸ ë°ì´í„°ë² ì´ìФì—서 utf8로 문ìžì…‹ì„ ë³€í™˜í• ë•Œ ë°ì´í„°ê°€ 잘리는 예ì´ë‹¤. .. code-block:: sql SET NAMES utf8; CREATE TABLE t1(col1 CHAR(1)); INSERT INTO t1 VALUES ('Ç'); ìœ„ì˜ ì§ˆì˜ë¥¼ 수행하면 'Ç'는 2ë°”ì´íЏ 문ìžì¸ë° col1 ì¹¼ëŸ¼ì˜ í¬ê¸°ëŠ” 1ë°”ì´íЏì´ë¯€ë¡œ col1ì˜ ë°ì´í„°ê°€ 잘리게 ëœë‹¤. ë°ì´í„°ë² ì´ìŠ¤ì˜ ë¬¸ìžì…‹ì€ iso88591ì¸ë° ìž…ë ¥ ë°ì´í„°ì˜ 문ìžì…‹ì€ utf8ì´ë©°, ì´ëŠ” utf8ì„ iso88591로 변환한다. .. _collation-setting-impacted-features: ì½œë ˆì´ì…˜ ì„¤ì •ìœ¼ë¡œ ì¸í•œ ì˜í–¥ --------------------------- LIKE ì¡°ê±´ 최ì í™” ^^^^^^^^^^^^^^^^ **LIKE** ì¡°ê±´ì€ ë¬¸ìžì—´ ë°ì´í„° ê°„ì˜ íŒ¨í„´ì„ ë¹„êµí•˜ì—¬ 문ìžì—´ì´ 패턴과 매ì¹ë˜ë©´ **TRUE** 를 리턴한다. í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì„ ì‚¬ìš©í• ë•Œì—는 ê° ì½”ë“œí¬ì¸íŠ¸ëŠ” 가중치를 나타내는 í•˜ë‚˜ì˜ ì •ìˆ˜ ê°’ì„ ê°–ëŠ”ë°, ì´ ê°€ì¤‘ì¹˜ ê°’ì€ ì½œë ˆì´ì…˜ ì„¤ì •(세기, ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 등)ì— ê¸°ë°˜í•˜ì—¬ 계산ëœë‹¤. 문ìžë“¤ì€ í•ìƒ í•˜ë‚˜ì˜ ê°œì²´(entity)로 간주ë 수 있기 때문ì—, **LIKE** ì¡°ê±´ì„ ì‚¬ìš©í•œ 패턴으로 문ìžì—´ì„ 매ì¹í•˜ë ¤ëŠ” 시ë„는 문ìžì—´ì´ ì–´ë–¤ 범위 ë‚´ì—서 발견ë 수 있는지 확ì¸í•˜ëŠ” 것과 ê°™ë‹¤ê³ ë³¼ 수 있다. 예를 들어, "s LIKE 'abc%'"는 칼럼 sì˜ ê°’ì€ ë¬¸ìžì—´ "abc"로 시작해야 한다는 ê²ƒì„ ì˜ë¯¸í•˜ë¯€ë¡œ, "s LIKE 'abc%'"와 ê°™ì€ ì ˆì„ ìˆ˜í–‰í•˜ê¸° 위해 ë¨¼ì € 칼럼 sì˜ ë¬¸ìžì—´ì— 대한 ì œí•œ 범위로 êµ¬ë¬¸ì„ ìž¬ìž‘ì„±í•œë‹¤. í™•ìž¥ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì—서 ì´ëŠ” sê°€ "abc"보다 í¬ê±°ë‚˜ 같지만 í›„ì† ë¬¸ìžì—´ë³´ë‹¤ 작다는 ì˜ë¯¸ì´ë‹¤. 예를 들어, ì˜ì–´ì˜ 알파벳 기준으로 'abc'ì˜ í›„ì† ë¬¸ìžì—´ì€ 'abd'ì´ë¯€ë¡œ 아래와 ê°™ì´ ë³€í™˜í• ìˆ˜ 있다. :: s LIKE 'abc%' → s ≥ 'abc' AND s < 'abd' (if using strictly the English alphabet) ì´ì™€ ê°™ì´ **LIKE** ì¡°ê±´ì˜ íŒ¨í„´ì€ ê°„ë‹¨í•œ ë¹„êµ ì¡°ê±´ìœ¼ë¡œ 대체ë 수 있는ë°, í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì˜ 경우는 다르게 ë™ìž‘한다. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì„ ì‚¬ìš©í• ë•Œ 문ìžì—´ì„ 비êµí•˜ëŠ” ê²ƒì€ ê° ì½”ë“œí¬ì¸íŠ¸ë‚˜ í™•ìž¥ì— ëŒ€í•´ ê° ìˆ˜ì¤€(level)별로 ì½œë ˆì´ì…˜ ì›ì†Œì˜ ê²°í•©ëœ ë¦¬ìŠ¤íŠ¸ë“¤ì„ ë¹„êµí•˜ëŠ” ê²ƒì„ ëœ»í•œë‹¤. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì—서 문ìžì—´ 비êµì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ :ref:`expansion` ì„ ì°¸ê³ í•˜ë©´ ëœë‹¤. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì— 대해서 ìœ„ì˜ ì˜ˆì™€ ê°™ì´ **LIKE** ì¡°ê±´ì„ ì¼ë°˜ ë¹„êµ ì¡°ê±´ìœ¼ë¡œ 변환하면 비êµê°€ 잘못ë 수 있다. ì •í™•í•œ ì§ˆì˜ ê²°ê³¼ë¥¼ 보장하기 위하여 í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì˜ 경우ì—는 **LIKE** ì¡°ê±´ 재작성 ë°©ë²•ì´ ì•„ëž˜ì˜ ì˜ˆì™€ ê°™ì´ ë‹¤ë¥´ê²Œ ë™ìž‘한다. 즉, 범위 조건으로 ë³€ê²½í•˜ê³ í™•ìž¥ 있는 ì½œë ˆì´ì…˜ì—서 잘못 추가ë 수 있는 ë°ì´í„°ë“¤ì„ ë°°ì œì‹œí‚¤ê¸° 위해 주어진 **LIKE** ì¡°ê±´ì´ í•„í„°ë¡œ 추가ëœë‹¤. :: s LIKE 'abc%' → s ≥ 'abc' AND s < 'abd' and s LIKE 'abc%' (if using strictly the English alphabet) ì»¤ë²„ë§ ì¸ë±ìФ ^^^^^^^^^^^^^ ì»¤ë²„ë§ ì¸ë±ìФ ìŠ¤ìº”ì€ ì‹¤ì œ ë ˆì½”ë“œë¥¼ 액세스하지 ì•Šê³ ì¸ë±ìŠ¤ì— ìžˆëŠ” ê°’ë§Œì„ ì‚¬ìš©í•´ì„œ 질ì˜ë¥¼ 처리하는 ì§ˆì˜ ìµœì í™” 기법으로, ì´ì— 대한 ìžì„¸í•œ ë‚´ìš©ì€ :ref:`covering-index` 를 ì°¸ê³ í•œë‹¤. ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì´ ì—†ëŠ” ì½œë ˆì´ì…˜ì—서 'abc'와 'ABC' ë‘ ê°œì˜ ë¬¸ìžì—´ì„ ì¸ë±ìŠ¤ì— ì €ìž¥í•œë‹¤ê³ ê°€ì •í• ë•Œ ì¸ë±ìŠ¤ì˜ í‚¤ 값으로 ì´ ì¤‘ í•˜ë‚˜ë§Œì´ ì €ìž¥ëœë‹¤. ì´ì™€ ê°™ì´ í•˜ë‚˜ì˜ ì½œë ˆì´ì…˜ì—서 서로 다른 ë‘ ê°œ ì´ìƒì˜ 문ìžì—´ì´ í•˜ë‚˜ì˜ í‚¤ ê°’ì„ ê°€ì§€ê²Œ ë˜ë©´, ì •í™•í•œ ì§ˆì˜ ê²°ê³¼ë¥¼ 만들어낼 수 없게 ëœë‹¤. ê²°êµ ìˆ˜ì¤€ 4(quaternary) 보다 ìž‘ì€ ì„¸ê¸°(strength)ì˜ ëª¨ë“ UTF-8 ì½œë ˆì´ì…˜ì—서 ì»¤ë²„ë§ ì¸ë±ìŠ¤ì— ì˜í•œ ì§ˆì˜ ìµœì 화는 ì ìš©ë˜ì§€ 않는다. ì´ëŸ¬í•œ 세기 ìˆ˜ì¤€ì€ LDMLì—서 ì½œë ˆì´ì…˜ ì •ì˜ë¥¼ 위한 <strength> íƒœê·¸ì˜ strength="tertiary/quaternary"ì— ì˜í•´ ì œì–´ë 수 있다. í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì˜ 세기 ê°’ì„ ìµœëŒ€ 값으로 ì„¤ì •í•˜ëŠ” ê²ƒì€ ì£¼ì˜ ê¹Šê²Œ ê³ ë ¤ë˜ì–´ì•¼ 하는ë°, 네 번째 세기 ìˆ˜ì¤€ì€ ê³µìœ ë¼ì´ë¸ŒëŸ¬ë¦¬ í¬ê¸°ì™€ 메모리 ìš”êµ¬ëŸ‰ì´ ì»¤ì§ˆ ë¿ë§Œ ì•„ë‹ˆë¼ ë¬¸ìžì—´ ë¹„êµ ì‹œê°„ì„ ì¦ê°€ì‹œí‚¤ê¸° 때문ì´ë‹¤. ì½œë ˆì´ì…˜ê³¼ ê´€ë ¨ëœ ìžì„¸í•œ ë‚´ìš©ì€ :ref:`collation`\ ì„ ì°¸ê³ í•œë‹¤. ê° ì½œë ˆì´ì…˜ì— 대한 기능 요약 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +---------------------+---------------------------------------------+------------------------+ | ì½œë ˆì´ì…˜ | LIKE ë¬¸ì„ ë²”ìœ„ë¡œ 재작성 ì´í›„ ì¡°ê±´ ìœ ì§€ | ì»¤ë²„ë§ ì¸ë±ìФ 허용 | +=====================+=============================================+========================+ | iso88591_bin | No | Yes | +---------------------+---------------------------------------------+------------------------+ | iso88591_en_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | iso88591_en_ci | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_bin | No | Yes | +---------------------+---------------------------------------------+------------------------+ | euckr_bin | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_en_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_en_ci | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_tr_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_ko_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_gen | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_gen_ai_ci | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_gen_ci | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_de_exp_ai_ci | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_de_exp | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_ro_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_es_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_fr_exp_ab | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_ja_exp | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_ja_exp_cbm | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_km_exp | Yes | No | +---------------------+---------------------------------------------+------------------------+ | utf8_ko_cs_uca | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_tr_cs_uca | No | Yes | +---------------------+---------------------------------------------+------------------------+ | utf8_vi_cs | No | Yes | +---------------------+---------------------------------------------+------------------------+ | binary | No | Yes | +---------------------+---------------------------------------------+------------------------+ ì½œë ˆì´ì…˜ ì •ë³´ 보기 ------------------ ì½œë ˆì´ì…˜ ì •ë³´ë¥¼ ë³´ë ¤ë©´ :func:`CHARSET`, :func:`COLLATION` ë° :func:`COERCIBILITY` ì •ë³´ 함수를 사용한다. ë°ì´í„°ë² ì´ìФ ì½œë ˆì´ì…˜ ì •ë³´ëŠ” **db_collation** 시스템 ë·° ë˜ëŠ” :ref:`show-collation-statement`\ ì„ í†µí•´ 확ì¸í• 수 있다. JDBCì—서 i18n ë¬¸ìž ì‚¬ìš© ======================= CUBRID JDBC는 문ìžì—´ ë° CUBRIDBinaryString ê°ì²´ë¥¼ 사용하여 서버ì—서 ìˆ˜ì‹ ëœ ë¬¸ìžì—´ 타입 ê°’ì„ ì €ìž¥í•œë‹¤. 문ìžì—´ ê°ì²´ëŠ” ê° ë¬¸ìžë¥¼ ì €ìž¥í•˜ê¸° 위해 ë‚´ë¶€ì 으로 UTF-16ì„ ì‚¬ìš©í•˜ë©°, ë°”ì´ë„ˆë¦¬ 문ìžì…‹ì„ ì œì™¸í•œ ëª¨ë“ ë¬¸ìžì—´ì„ ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©ëœë‹¤. CUBRIDBinaryStringì€ ë°”ì´íЏ ë°°ì—´ì„ ì‚¬ìš©í•˜ë©° ë°”ì´ë„ˆë¦¬ 문ìžì…‹ì˜ 문ìžì—´ ê°’ì„ ì €ìž¥í•˜ëŠ” ë° ì‚¬ìš©ëœë‹¤. 서버ì—서 ìˆ˜ì‹ ëœ ê° ë¬¸ìžì—´ ê°’ì˜ ë°ì´í„° 버í¼ì—는 서버ì—서 ìˆ˜ì‹ ëœ ê°’ì˜ ë¬¸ìžì…‹ì´ í¬í•¨ëœë‹¤. ì´ ë¬¸ìžì…‹ì€ ì»¬ëŸ¼ì˜ ë¬¸ìžì…‹, í‘œí˜„ì‹ ê²°ê³¼ì˜ ë¬¸ìžì…‹, 시스템 문ìžì…‹(문ìžì…‹ì´ 표현ë˜ì§€ ì•Šì€ ê²½ìš°) 중 하나ì´ë‹¤ .. note:: ì´ì „ ë²„ì „ì—서는 JDBC 문ìžì—´ ê°ì²´ë¥¼ ì¸ìŠ¤í„´ìŠ¤í™”í•˜ëŠ” ë° ì—°ê²°URLì˜ ë¬¸ìžì…‹ì´ 사용ë˜ì—ˆë‹¤. UTF-8 문ìžì…‹ì„ 갖는 컬럼 한 개와 ë°”ì´ë„ˆë¦¬ 문ìžì…‹ì„ 갖는 다른 ì»¬ëŸ¼ì´ í¬í•¨ëœ í…Œì´ë¸” ìƒì„±: .. code-block:: sql CREATE TABLE t1(col1 VARCHAR(10) CHARSET utf8, col2 VARCHAR(10) CHARSET binary); 한 ë ˆì½”ë“œ ìž…ë ¥ (ë‘번째 ì»¬ëŸ¼ì€ ëžœë¤ ê°’): .. code-block:: java Connection conn = getConn(null); PreparedStatement st = conn.prepareStatement("insert into t1 values( ?, ? )"); byte[] b = new byte[]{(byte)161, (byte)224}; CUBRIDBinaryString cbs = new CUBRIDBinaryString(b); String utf8_str = new String("abc"); st.setObject(1, utf8_str); st.setObject(2, cbs); st.executeUpdate(); í…Œì´ë¸” ì§ˆì˜ ë° ë‚´ìš© 표시(ë°”ì´ë„ˆë¦¬ 문ìžì—´ì˜ 경우 hex dump, 다른 문ìžì…‹ì˜ 경우 문ìžì—´ ê°’ 표시): .. code-block:: java ResultSet rs = null; Statement stmt = null; rs = stmt.executeQuery("select col1, col2 from t1;"); ResultSetMetaData rsmd = null; rsmd = rs.getMetaData(); int numberofColumn = rsmd.getColumnCount(); while (rs.next()) { for (int j = 1; j <= numberofColumn; j++) { String columnTypeName = rsmd.getColumnTypeName(j); int columnType = rsmd.getColumnType(j); if (((CUBRIDResultSetMetaData) rsmd).getColumnCharset(j).equals("BINARY")) { // database string with binary charset Object res; byte[] byte_array = ((CUBRIDBinaryString) res).getBytes(); res = rs.getObject(j); System.out.println(res.toString()); } else { // database string with any other charset String res; res = rs.getString(j); System.out.print(res); } } } 타임존 ì„¤ì • =========== íƒ€ìž„ì¡´ì€ ì‹œìŠ¤í…œ 파ë¼ë¯¸í„°ë¥¼ 통해 ì„¤ì •í• ìˆ˜ 있는ë°, 세션ì—서 ì„¤ì •í•˜ëŠ” **timezone** 파ë¼ë¯¸í„°ì™€ ë°ì´í„°ë² ì´ìФ 서버ì—서 ì„¤ì •í•˜ëŠ” **server_timezone** 파ë¼ë¯¸í„°ê°€ 있다. 타임존 파ë¼ë¯¸í„°ì— 대한 ì„¤ëª…ì€ :ref:`timezone-parameters`\를 ì°¸ê³ í•œë‹¤. **timezone** 파ë¼ë¯¸í„°ëŠ” ì„¸ì…˜ì— ëŒ€í•œ 파ë¼ë¯¸í„°ì´ë‹¤. 세션 단위로 ë³„ê°œì˜ ì„¤ì •ì„ ìœ ì§€í• ìˆ˜ 있다. :: SET SYSTEM PARAMETERS 'timezone=Asia/Seoul'; ì´ ê°’ì„ ì„¤ì •í•˜ì§€ ì•Šì€ ê²½ìš° **server_timezone** 파ë¼ë¯¸í„°ì˜ ì„¤ì •ì„ ë”°ë¥¸ë‹¤. **server_timezone** 파ë¼ë¯¸í„°ëŠ” ë°ì´í„°ë² ì´ìФ ì„œë²„ì— ëŒ€í•œ 파ë¼ë¯¸í„°ì´ë‹¤. :: SET SYSTEM PARAMETERS 'server_timezone=Asia/Seoul'; ì´ ê°’ì„ ì„¤ì •í•˜ì§€ ì•Šì€ ê²½ìš° OSì˜ ì„¤ì •ì„ ë”°ë¥¸ë‹¤. íƒ€ìž„ì¡´ì„ ì‚¬ìš©í•˜ë ¤ë©´ 타임존 íƒ€ìž…ì„ ì‚¬ìš©í•´ì•¼ 하는ë°, ì´ì™€ ê´€ë ¨í•˜ì—¬ :ref:`timezone-type`\ì„ ì°¸ê³ í•œë‹¤. íƒ€ìž„ì¡´ì„ ì§€ì— ì´ë¦„으로 ì„¤ì •í•˜ëŠ” 경우 별ë„ì˜ íƒ€ìž„ì¡´ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 필요로 하는ë°, í브리드 설치 시 ì œê³µí•˜ëŠ” ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 아닌 ì—…ë°ì´íŠ¸ëœ íƒ€ìž„ì¡´ ì •ë³´ë¥¼ 가진 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ì‚¬ìš©í•˜ë ¤ë©´, 타임존 ì •ë³´ë¥¼ 변경한 후 ì§ì ‘ ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 컴파ì¼í•´ì•¼ 한다. 다ìŒì€ ìµœì‹ ì˜ íƒ€ìž„ì¡´ ì •ë³´ë¥¼ IANA(http://www.iana.org/time-zones)로부터 받아와 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 컴파ì¼í•˜ëŠ” 예ì´ë‹¤. 보다 ìžì„¸í•œ ì„¤ëª…ì€ ë‹¤ìŒ ì„¤ëª…ì„ ì°¸ê³ í•œë‹¤. .. _timezone-library: 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ ì»´íŒŒì¼ ------------------------ ì§€ì— ì´ë¦„으로 íƒ€ìž„ì¡´ì„ ëª…ì‹œí•˜ì—¬ ì‚¬ìš©í•˜ë ¤ë©´ 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 필요한ë°, í브리드 설치 시 기본으로 ì œê³µëœë‹¤. 그런ë°, 타임존 ì§€ì— ì •ë³´ë¥¼ ìµœì‹ ì •ë³´ë¡œ ì—…ë°ì´íŠ¸í•˜ë ¤ë©´ IANA(http://www.iana.org/time-zones)ì—서 ìµœì‹ ì½”ë“œë¥¼ 받아와 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ 컴파ì¼í•´ì•¼ 한다. 다ìŒì€ 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ìµœì‹ ì •ë³´ë¡œ ì—…ë°ì´íŠ¸í•˜ê¸° 위한 ì ˆì°¨ì´ë‹¤. ë¨¼ì € êµ¬ë™ ì¤‘ì¸ í브리드 서비스를 종료한 후, OSì— ë”°ë¼ ë‹¤ìŒ ì ˆì°¨ë¥¼ 수행한다. 윈ë„우즈 ^^^^^^^^ 1. http://www.iana.org/time-zones ì—서 ìµœì‹ ì˜ íƒ€ìž„ì¡´ ë°ì´í„°ë¥¼ ë‚´ë ¤ë°›ëŠ”ë‹¤. "Latest version"ì˜ "Time Zone Data"ì— ë§í¬ëœ 파ì¼ì„ 받는다. 2. **%CUBRID%/timezones/tzdata** ë””ë ‰í„°ë¦¬ ì´í•˜ì— ì••ì¶• 파ì¼ì„ 푼다. 3. **%CUBRID%/bin/make_tz.bat** 를 실행한다. **%CUBRID%/lib** ì´í•˜ì— **libcubrid_timezones.dll** ì´ ìƒì„±ëœë‹¤. :: make_tz.bat .. note:: **make_locale** 스í¬ë¦½íŠ¸ë¥¼ Windowsì—서 ì‹¤í–‰í•˜ë ¤ë©´, Visual C++ 2005, 2008 ë˜ëŠ” 2010 중 하나가 설치ë˜ì–´ 있어야 한다. 리눅스 ^^^^^^ 1. http://www.iana.org/time-zones ì—서 ìµœì‹ ì˜ íƒ€ìž„ì¡´ ë°ì´í„°ë¥¼ ë‚´ë ¤ 받는다. "Latest version"'ì˜ "Time Zone Data"ì— ë§í¬ëœ 파ì¼ì„ 다운로드 한다. 2. ì••ì¶•ëœ íŒŒì¼ì„ **$CUBRID/timezones/tzdata** directoryì— í‘¼ë‹¤. 3. **make_tz.sh** 를 실행한다. **$CUBRID/lib** ë””ë ‰í„°ë¦¬ì— **libcubrid_timezones.so** 파ì¼ì´ ìƒì„±ëœë‹¤. :: make_tz.sh 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ ë° ë°ì´í„°ë² ì´ìФ 호환성 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CUBRIDì—서 ë¹Œë“œëœ íƒ€ìž„ì¡´ ë¼ì´ë¸ŒëŸ¬ë¦¬ì—는 타임존 ë°ì´í„°ì˜ MD5 ì²´í¬ì„¬ì´ í¬í•¨ëœë‹¤. ì´ í•´ì‹œëŠ” 해당 ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 ìƒì„±ëœ ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ì˜ **db_root** 시스템 í…Œì´ë¸”ì˜ **timezone_checksum** ì»¬ëŸ¼ì— ì €ìž¥ëœë‹¤. 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ 변경ë˜ê³ (새로운 타임존 ë°ì´í„°ë¡œ 다시 컴파ì¼ë¨) ì²´í¬ì„¬ì´ 변경ë˜ë©´ 기존 ë°ì´í„°ë² ì´ìŠ¤ë¡œ CUBRID 서버와 ê·¸ ë°–ì˜ ëª¨ë“ CUBRID ë„구를 ì‹œìž‘í• ìˆ˜ 없다. ì´ëŸ¬í•œ 호환성 ë¬¸ì œë¥¼ 방지하는 방법 중 하나는 **make_tz** ë„êµ¬ì˜ **extend** ì¸ìžë¥¼ 사용하는 것ì´ë‹¤. extend ì˜µì…˜ì„ ì‚¬ìš©í•˜ë©´ ë°ì´í„°ë² ì´ìŠ¤ì˜ **timezone_checksum** ê°’ë„ ìƒˆë¡œìš´ 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ 새로운 MD5 ì²´í¬ì„¬ìœ¼ë¡œ 변경ëœë‹¤. IANA 사ì´íЏì—서 다른 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ ë²„ì „ì„ ì‚¬ìš©í•˜ë ¤ëŠ” 경우 extend ê¸°ëŠ¥ì„ ì‚¬ìš©í•´ì•¼ 한다. ì´ ê¸°ëŠ¥ì´ ìˆ˜í–‰í•˜ëŠ” ë‘ ê°€ì§€ ìž‘ì—…ì€ ë‹¤ìŒê³¼ 같다. - ì´ì „ 타임존 ë°ì´í„°ì™€ 새 타임존 ë°ì´í„°ë¥¼ 병합하여 새 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ìƒì„±í•œë‹¤. ë°ì´í„°ë² ì´ìФ í…Œì´ë¸”ì— ìžˆëŠ” ë°ì´í„°ì™€ì˜ ì—í˜¸í™˜ì„±ì„ ìœ„í•´, 병합 후ì—ë„ ìƒˆ 타임존 ë°ì´í„°ë² ì´ìŠ¤ì— ì¡´ìž¬í•˜ì§€ 않는 ëª¨ë“ íƒ€ìž„ì¡´ ì§€ì—ì„ ìœ ì§€í•œë‹¤. - 새 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ê°€ ìƒì„±ë˜ì—ˆì„ 때 ì—í˜¸í™˜ì„±ì„ ìœ ì§€í• ìˆ˜ 없는 경우 í…Œì´ë¸”ì—서 타임존 ë°ì´í„°ë¥¼ ê°±ì‹ í•œë‹¤. 오프셋 규칙 ë˜ëŠ” 서머타임 ê·œì¹™ì´ ë³€ê²½ë 때 ì´ëŸ¬í•œ ìƒí™©ì´ ë°œìƒí• 수 있다. extend 옵션과 함께 **make_tz**\를 실행하면 ë°ì´í„°ë² ì´ìФ ë””ë ‰í„°ë¦¬ 파ì¼(**databases.txt**)ì— ìžˆëŠ” ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ê°€ MD5 ì²´í¬ì„¬ê³¼ 함께 ê°±ì‹ ëœë‹¤. 다ìŒê³¼ ê°™ì€ ì˜ˆì™¸ì ì¸ ìƒí™©ì´ 있다. - 여러 사용ìžê°€ ë™ì¼í•œ **CUBRID** 설치를 ê³µìœ í•˜ëŠ”ë°, ê·¸ 중 한 ëª…ì´ extend를 수행하는 경우가 있다. extend를 수행한 사용ìžì—게 다른 사용ìžë“¤ì˜ ë°ì´í„°ë² ì´ìŠ¤ê°€ í¬í•¨ëœ 파ì¼ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 ê¶Œí•œì´ ì—†ëŠ” 경우 다른 사용ìžë“¤ì˜ ë°ì´í„°ë² ì´ìŠ¤ëŠ” ê°±ì‹ ë˜ì§€ 않는다. ê·¸ 후, ë°ì´í„°ë² ì´ìŠ¤ê°€ ê°±ì‹ ë˜ì§€ ì•Šì€ ë‹¤ë¥¸ 사용ìžê°€ ìžì‹ ì˜ ë°ì´í„°ë² ì´ìФì—서 extend를 ìˆ˜í–‰í•˜ë ¤ê³ ì‹œë„하면 ë¼ì´ë¸ŒëŸ¬ë¦¬ì˜ ì²´í¬ì„¬ì´ ìžì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ì— ìžˆëŠ” ì²´í¬ì„¬ê³¼ 다르기 ë•Œë¬¸ì— ìž‘ì—…ì— ì‹¤íŒ¨í•œë‹¤. - **CUBRID_DATABASES** 환경 변수 ê°’ì´ ë‹¤ë¥¸ 사용ìžì˜ 경우 **databases.txt** 파ì¼ì´ 다르다. ì´ ê²½ìš° 현재로서는 한 ë²ˆì— ëª¨ë“ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ê°±ì‹ í•˜ëŠ” ê²ƒì´ ë¶ˆê°€ëŠ¥í•˜ë‹¤. í•´ê²°ì±…ì€ ë‘ ê°€ì§€ê°€ 있다. - ê° ì‚¬ìš©ìžì—게 ìžì‹ ì˜ ë°ì´í„°ë² ì´ìŠ¤ê°€ í¬í•¨ëœ í´ë”ì— ì•¡ì„¸ìŠ¤í• ìˆ˜ 있는 ê¶Œí•œì„ ë¶€ì—¬í•˜ê³ , **CUBRID_DATABASES** ë³€ìˆ˜ì˜ ê°’ì„ ë™ì¼í•˜ê²Œ ë§Œë“ ë‹¤. - ì´ê²ƒì´ 불가능한 경우 ê° ì‚¬ìš©ìžì— 대해 다ìŒì„ ìˆ˜í–‰í• ìˆ˜ 있다. - 현재 타임존 ë¼ì´ë¸ŒëŸ¬ë¦¬ ë° **databases.txt** íŒŒì¼ ë°±ì—… - **databases.txt** 파ì¼ì—서 현재 사용ìžì˜ ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì œì™¸í•œ ëª¨ë“ ë°ì´í„°ë² ì´ìФ ì‚ì œ - extend 실행 - **databases.txt** íŒŒì¼ ë° íƒ€ìž„ì¡´ ë¼ì´ë¸ŒëŸ¬ë¦¬ 복구 단 마지막 사용ìžì˜ 경우 최종 단계ì—서 **databases.txt** 파ì¼ë§Œ ë³µêµ¬í•˜ê³ íƒ€ìž„ì¡´ ë¼ì´ë¸ŒëŸ¬ë¦¬ 복구는 하지 않는다. ë¦¬ëˆ…ìŠ¤ì˜ ê²½ìš°: :: make_tz.sh -g extend 윈ë„ìš°ì¦ˆì˜ ê²½ìš°: :: make_tz.bat /extend JDBCì—서 타임존 ë°ì´í„° 타입 사용 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ JDBC CUBRID 드ë¼ì´ë²„는 타임존 ì •ë³´ì— ëŒ€í•´ ì™„ì „í•˜ê²Œ CUBRID ì„œë²„ì— ì˜ì¡´í•œë‹¤. ìžë°”와 CUBRIDê°€ íƒ€ìž„ì¡´ì— ëŒ€í•´ ë™ì¼í•œ ì •ë³´ì˜ ê¸°ë³¸ 소스가 사용ë˜ë”ë¼ë„ ì§€ì—명과 타임존 ì •ë³´ê°€ 호환ë˜ì§€ ì•ŠëŠ”ë‹¤ê³ ê°„ì£¼ëœë‹¤. íƒ€ìž„ì¡´ì´ ìžˆëŠ” ëª¨ë“ CUBRID ë°ì´í„° íƒ€ìž…ì€ **CUBRIDTimestamptz** ìžë°” ê°ì²´ì— 매핑ëœë‹¤. JDBC를 사용하여 íƒ€ìž„ì¡´ì´ ìžˆëŠ” ê°’ 삽입: .. code-block:: java String datetime = "2000-01-01 01:02:03.123"; String timezone = "Europe/Kiev"; CUBRIDTimestamptz dt_tz = CUBRIDTimestamptz.valueOf(datetime, false, timezone); PreparedStatement pstmt = conn.prepareStatement("insert into t values(?)"); pstmt.setObject(1, ts); pstmt.executeUpdate(); JDBC를 사용하여 íƒ€ìž„ì¡´ì´ ìžˆëŠ” ê°’ 검색: .. code-block:: java String sql = "select * from tz"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); CUBRIDTimestamptz object1 = (CUBRIDTimestamptz) rs.getObject(1); System.out.println("object: " + object1.toString()); CUBRID JDBC는 ë‚´ë¶€ì 으로 **CUBRIDTimestamptz** ê°ì²´ì˜ ë‚ ì§œ/시간 ë¶€ë¶„ì„ 1970ë…„ 1ì›” 1ì¼ ì´í›„ 경과한 시간(밀리초)(Unix epoch)ì´ ë³´ê´€ë˜ëŠ” 'long' ê°’(ë‚ ì§œ ê°ì²´ë¥¼ 통해 ìƒì†)ì— ì €ìž¥í•œë‹¤. **CUBRIDTimestamptz** ê°ì²´ëŠ” 로컬 íƒ€ìž„ì¡´ì„ ì‚¬ìš©í•˜ëŠ” 타임스탬프 ê°ì²´ì™€ëŠ” 달리 UTC 시간 참조ì—서 ë‚´ë¶€ ì¸ì½”ë”©ì„ ìˆ˜í–‰í•˜ê¸° 때문ì—, ìžë°” 로컬 타임존과 ë™ì¼í•œ 타임존으로 ìƒì„±ë˜ì–´ë„ 보관하는 ë‚´ë¶€ epoch ê°’ì€ ë‹¤ë¥´ë‹¤. Unix epoch를 ì œê³µí•˜ë ¤ë©´ **getUnixTime()** 메서드를 사용하면 ëœë‹¤. .. code-block:: java String datetime = "2000-01-01 01:02:03.123"; String timezone = "Asia/Seoul"; CUBRIDTimestamptz dt_tz = CUBRIDTimestamptz.valueOf(datetime, false, timezone); System.out.println("dt_tz.getTime: " + dt_tz.getTime()); System.out.println("dt_tz.getUnixTime: " + dt_tz.getUnixTime ()); .. _char-data-conf-guide: 다êµì–´ ì„¤ì •ì„ ìœ„í•œ ê³ ë ¤ ì‚¬í• ============================ ë°ì´í„°ë² ì´ìФ 설계ìžëŠ” ë°ì´í„°ë² ì´ìФ 구조를 ì„¤ê³„í• ë•Œ ë¬¸ìž ë°ì´í„°ì˜ ì†ì„±ì„ ê³ ë ¤í•´ì•¼ 한다. 다ìŒì€ ë¬¸ìž ë°ì´í„° ì„¤ì • ì‹œì— ì•Œì•„ì•¼ í• ì‚¬í•ë“¤ì„ ìš”ì•½í•œ 것ì´ë‹¤. 로캘 ---- * 기본ì 으로 DB ìƒì„± 시 ë¡œìº˜ì„ en_US를 사용하면 가장 ì¢‹ì€ ì„±ëŠ¥ì„ ë‚¸ë‹¤. ì˜ì–´ë§Œ 사용한다면 ë¡œìº˜ì„ en_US로 ì§€ì •í•˜ëŠ” ê²ƒì´ ê°€ìž¥ 좋다. * UTF-8 ë¡œìº˜ì˜ ì‚¬ìš©ì€ CHAR íƒ€ìž…ì— ëŒ€í•´ 추가ì ì¸ ì €ìž¥ ê³µê°„ì„ í•„ìš”ë¡œ 한다. ê³ ì • ê¸¸ì´ ë¬¸ìž íƒ€ìž…(CHAR)ì˜ ê²½ìš° 4배까지 늘어나며, EUC-KRì˜ ê²½ìš° 3배까지 늘어난다. * ì‚¬ìš©ìž ë¬¸ìžì—´ ë¦¬í„°ëŸ´ì´ ì‹œìŠ¤í…œê³¼ 다른 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ 가진다면, 질ì˜ë¬¸ì€ 문ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì„ ì„¤ì •í•˜ê¸° 위해 ë” ê¸¸ì–´ì§ˆ 것ì´ë‹¤. * ASCII 문ìžê°€ 아닌 문ìžë¥¼ ì‚¬ìš©ìž ì‹ë³„ìžë¡œ ì‚¬ìš©í•˜ë ¤ë©´ .utf8 ë¡œìº˜ì„ ì‚¬ìš©í•œë‹¤. * UTF-8 문ìžì…‹ì´ ì„¤ì •ë˜ë©´, 시스템 로캘보다는 LDML ë¡œìº˜ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì´ ì¢‹ë‹¤. LDML ë¡œìº˜ì€ ì‹ë³„ìžì— í¬í•¨ëœ ìœ ë‹ˆì½”ë“œ 문ìžì˜ ëŒ€ì†Œë¬¸ìž ë³€í™˜ì„ ë³´ìž¥í•œë‹¤. * 로캘 ì„¤ì •ì€ ë¬¸ìžì—´ 변환 함수ì—ë„ ì˜í–¥ì„ 준다. 가장 빈번하게 ë³€í™˜ì´ ì´ë£¨ì–´ì§€ëŠ” ë¡œìº˜ì„ ì„ íƒí•˜ëŠ” ê²ƒì´ ì¢‹ë‹¤. * 로캘 ì„¤ì • 시 문ìžì—´ ìƒìˆ˜, ì‚¬ìš©ìž í…Œì´ë¸” ì¹¼ëŸ¼ì˜ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì— 대해 ê³ ë¯¼í•˜ì§€ ì•Šì•„ë„ ëœë‹¤. 질ì˜ë¬¸ì—서 :func:`CAST` ì—°ì‚°ìžë¥¼ 사용하여 ëŸ°íƒ€ìž„ì— ë°”ê¿€ 수 있으며, "ALTER ... CHANGE" ë¬¸ì„ í†µí•´ ì˜êµ¬ížˆ 바꿀 수 있다. 단, ì½œë ˆì´ì…˜ ê°„ì— ë³€í™˜ì€ ê°™ì€ ë¬¸ìžì…‹ë¼ë¦¬ë§Œ 가능하다. CHAR와 VARCHAR -------------- * ì¼ë°˜ì 으로 ë°ì´í„°ì˜ í¬ê¸° 변화가 ì‹¬í• ë•ŒëŠ” VARCHAR를 사용한다. * CHAR íƒ€ìž…ì€ ê³ ì • ê¸¸ì´ íƒ€ìž…ì´ë¯€ë¡œ, ì˜ë¬¸ë§Œ ì €ìž¥í•˜ëŠ” 경우ì—ë„ UTF-8ì€ 4 bytesì˜ ì €ìž¥ 공간ì„, EUC-KRì€ 3 bytesì˜ ì €ìž¥ ê³µê°„ì„ í•„ìš”ë¡œ 한다. * ì¹¼ëŸ¼ì˜ ìžë¦¿ìˆ˜(precision)는 문ìž(글리프, ë¬¸ìž ê¸°í˜¸)ì˜ ê°œìˆ˜ì´ë‹¤. * ìžë¦¿ìˆ˜ë¥¼ ì •í•œ ì´í›„ì—, ëŒ€ë¶€ë¶„ì˜ ì‚¬ìš© ì‹œë‚˜ë¦¬ì˜¤ì— ë”°ë¼ ë¬¸ìžì…‹ê³¼ ì½œë ˆì´ì…˜ì´ ì„¤ì •ë˜ì–´ì•¼ 한다. 문ìžì…‹ ì„ íƒ ----------- * í…스트가 ASCIIê°€ 아닌 문ìžë¥¼ í¬í•¨í•˜ê³ 있ë”ë¼ë„ ì‘ìš© í”„ë¡œê·¸ëž¨ì´ ë¬¸ìž ê°œìˆ˜ 세기, 문ìžì—´ 치환 ë“±ì˜ ë¬¸ìžì—´ ì¡°ìž‘ì´ í•„ìš”í•œ ê²½ìš°ì— utf8ì´ë‚˜ euckr 문ìžì…‹ì„ 사용한다. * CHAR íƒ€ìž…ì˜ ì €ìž¥ ê³µê°„ì„ ê³ ë ¤í•´ì•¼ 한다. * CHAR와 VARCHAR 타입ì—서 INSERT/UPDATE 시 오버헤드가 있다. ê° í–‰ì—서 문ìžì—´ì˜ ë¬¸ìž ê°œìˆ˜(precision)를 세는 ê²ƒì€ ISOê°€ 아닌 문ìžì…‹ì—서 ë” ë§Žì€ ìˆ˜í–‰ ì‹œê°„ì„ í•„ìš”ë¡œ 한다. * 질ì˜ë¬¸ ë‚´ì˜ í‘œí˜„ì‹ì˜ 문ìžì…‹ì€ :func:`CAST` ì—°ì‚°ìžë¥¼ 사용하여 ë³€í™˜í• ìˆ˜ 있다. ì½œë ˆì´ì…˜ ì„ íƒ ------------- * ì½œë ˆì´ì…˜ì— ì˜ì¡´í•˜ëŠ” ì—°ì‚°(문ìžì—´ 검색, ì •ë ¬, 비êµ, ëŒ€ì†Œë¬¸ìž êµ¬ë¶„)ì„ ìˆ˜í–‰í•˜ì§€ 않는 경우 해당 문ìžì…‹ì˜ bin ì½œë ˆì´ì…˜ì´ë‚˜ ë°”ì´ë„ˆë¦¬ ì½œë ˆì´ì…˜ì„ ì„ íƒí•œë‹¤. * 표현ì‹ì˜ ì›ëž˜ 문ìžì…‹ê³¼ 새로운 ì½œë ˆì´ì…˜ 사ì´ì—서 문ìžì…‹ì´ 변경ë˜ì§€ 않는다면 ì½œë ˆì´ì…˜ì€ :func:`CAST` ì—°ì‚°ìž, :ref:`COLLATE ìˆ˜ì •ìž<charset-collate-modifier>`\ 를 사용하여 쉽게 오버ë¼ì´ë“œí• 수 있다. * ì½œë ˆì´ì…˜ì€ 문ìžì—´ì˜ ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ê·œì¹™ì„ ì œì–´í•œë‹¤. * í™•ìž¥ì´ ìžˆëŠ” ì½œë ˆì´ì…˜ì€ ë” ëŠë¦¬ì§€ë§Œ ë” ìœ ì—°í•˜ë©° ì „ì²´ 단어 ì •ë ¬ì„ ìˆ˜í–‰í•œë‹¤. ì •ê·œí™” ------ * ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ CUBRIDì— ë¶„í•´ëœ í˜•íƒœì˜ í…스트 ë°ì´í„°ë¥¼ 보낸다면, **unicode_input_normalization** = yes로 ì„¤ì •í•˜ì—¬ CUBRIDê°€ 재구성하여 ê²°í•©ëœ í˜•íƒœë¡œ 다룰 수 있ë„ë¡ í•œë‹¤. * ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ë¶„í•´ëœ í˜•íƒœë§Œ 다룰 수 있다면, **unicode_output_normalization** = yes로 ì„¤ì •í•˜ì—¬ CUBRIDê°€ í•ìƒ ë¶„í•´ëœ í˜•ì‹ìœ¼ë¡œ í…스트 ë°ì´í„°ë¥¼ ë³´ë‚´ë„ë¡ í•œë‹¤. * ì‘ìš© í´ë¼ì´ì–¸íŠ¸ê°€ ëª¨ë“ í˜•ì‹ì„ ì•Œê³ ìžˆë‹¤ë©´, **unicode_output_normalization** = noì¸ ìƒíƒœë¡œ 둔다. CAST vs COLLATE --------------- * :func:`CAST` ì—°ì‚°ìžëŠ” :ref:`COLLATE ìˆ˜ì •ìž<charset-collate-modifier>`\ 보다 ë” ë§Žì€ ì‹¤í–‰ ë¹„ìš©ì´ ë“ ë‹¤ (문ìžì…‹ ë³€í™˜ì´ ë°œìƒí•˜ë©´ ë” ë§Žì€ ë¹„ìš©ì´ ë“ ë‹¤). * :ref:`COLLATE ìˆ˜ì •ìž<charset-collate-modifier>`\ 는 ì§ˆì˜ ì‹¤í–‰ ê³¼ì •ì—서 실행 ì—°ì‚°ì´ ì¶”ê°€ë˜ì§€ 않기 때문ì—, :ref:`COLLATE ìˆ˜ì •ìž<charset-collate-modifier>`\ 를 사용하는 ê²ƒì´ :func:`CAST` ì—°ì‚°ìžë¥¼ 사용하는 것보다 실행 ì†ë„ê°€ ë” ë¹ ë¥´ë‹¤. * :ref:`COLLATE ìˆ˜ì •ìž<charset-collate-modifier>`\ 는 문ìžì…‹ì´ 바뀌지 ì•Šì„ ë•Œë§Œ 사용ë 수 있다. ì£¼ì˜ ì‚¬í• ========= * 호스트 ë³€ìˆ˜ì˜ ì§€ì—° ë°”ì¸ë”©ì´ 있는 ê²½ìš°ì— ì§ˆì˜ ì‹¤í–‰ ê³„íš ì¶œë ¥ ì‹œì— ì½œë ˆì´ì…˜ì´ ì¶œë ¥ë˜ì§€ 않는다. * 기본 다êµì–´ ì˜ì—ì¸ 0000~FFFF ë²”ìœ„ì˜ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íŠ¸ë§Œ ì •ê·œí™”ëœë‹¤. * ìˆ«ìž êµ¬ë¶„ìžë¡œ íŠ¹ì • 문ìž(예를 들어, 공백 문ìž)를 ì‚¬ìš©í• ìˆ˜ 없다. ì¼ë¶€ 로캘ì—서는 공백 문ìžë¥¼ ìˆ«ìž êµ¬ë¶„ìžë¡œ í™œìš©í•˜ê¸°ë„ í•˜ëŠ”ë°, ì´ëŠ” 허용ë˜ì§€ 않는다. .. note:: * 9.2 ì´í•˜ ë²„ì „ì—서 ì‚¬ìš©ìž ì •ì˜ ë³€ìˆ˜ëŠ” 시스템 ì½œë ˆì´ì…˜ê³¼ 다른 ì½œë ˆì´ì…˜ìœ¼ë¡œ ì„¤ì •í• ìˆ˜ 없다. 예를 들어, 시스템 ì½œë ˆì´ì…˜ì´ iso88591ì¼ ë•Œ "SET @v1='a' COLLATE utf8_en_cs;"ê³¼ ê°™ì€ êµ¬ë¬¸ì„ ì‚¬ìš©í• ìˆ˜ 없다. * 9.3 ì´ìƒ ë²„ì „ì—서는 ìœ„ì˜ ì œì•½ì´ ë” ì´ìƒ 존재하지 않는다. 로캘과 ì½œë ˆì´ì…˜ 추가 안내서 =========================== ëŒ€ë¶€ë¶„ì˜ ìƒˆë¡œìš´ 로캘 ë˜ëŠ” ì½œë ˆì´ì…˜ì€ 사용ìžê°€ LDML 파ì¼ì„ 새로 추가 ë˜ëŠ” 변경해서 추가ë 수 있다. CUBRIDì—서 사용ë˜ëŠ” LDML íŒŒì¼ í¬ë§·ì€ Unicode Locale Data Markup Language(http://www.unicode.org/reports/tr35/)ì—서 비롯ë˜ì—ˆë‹¤. CUBRIDì—ë§Œ 명시ë˜ëŠ” 태그와 ì†ì„±ì€ ì´ë¦„ì— "cubrid"를 í¬í•¨í•˜ê³ 있기 ë•Œë¬¸ì— ì‰½ê²Œ êµ¬ë³„í• ìˆ˜ 있다. 새로운 ë¡œìº˜ì„ ì¶”ê°€í•˜ëŠ” 가장 ì¢‹ì€ ë°©ë²•ì€ ê¸°ì¡´ì˜ LDML 파ì¼ì„ 복사해서 ì›í•˜ëŠ” 결과가 나올 때까지 ì„¤ì •ì„ ë°”ê¾¸ëŠ” 것ì´ë‹¤. íŒŒì¼ ì´ë¦„ì€ "cubrid_<*language*>.xml"ê³¼ ê°™ì´ ì£¼ì–´ì ¸ì•¼ 하며 **$CUBRID/locales/data/ldml** ë””ë ‰í„°ë¦¬ì— ìœ„ì¹˜í•œë‹¤. <*language*> ë¶€ë¶„ì€ IETF í¬ë§·(https://en.wikipedia.org/wiki/BCP_47)ì— ìžˆëŠ” ASCII 문ìžì—´(보통 5ê°œ 문ìž)ì´ì–´ì•¼ 한다. LDML 파ì¼ì„ ìƒì„±í•œ ì´í›„, <*language*> ë¶€ë¶„ì´ CUBRID ì„¤ì • 파ì¼ì¸ **$CUBRID/conf/cubrid_locales.txt** ì— ì¶”ê°€ë˜ì–´ì•¼ 한다. ì´ íŒŒì¼ì— 기ë¡ëœ ì–¸ì–´ì˜ ìˆœì„œê°€ 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬ë¥¼ ìƒì„±(컴파ì¼)í•˜ê³ êµ¬ë™ ì‹œ ë¡œìº˜ì„ ì½ëŠ” ìˆœì„œìž„ì— ìœ ì˜í•œë‹¤. **make_locale** 스í¬ë¦½íŠ¸ëŠ” 새로 추가ë˜ëŠ” ë¡œìº˜ì„ ì»´íŒŒì¼í•˜ê³ ê·¸ ë°ì´í„°ë¥¼ CUBRID 로캘 ë¼ì´ë¸ŒëŸ¬ë¦¬(**$CUBRID/lib/** )ì— ì¶”ê°€í•˜ëŠ”ë° ì‚¬ìš©ëœë‹¤. LDML 파ì¼ì€ UTF-8로 ì¸ì½”딩ë˜ë©°, ê°™ì€ LDML 파ì¼ì—는 í•˜ë‚˜ì˜ ë¡œìº˜ ì •ë³´ë§Œ 기ë¡í• 수 있다. LDML 파ì¼ì— 새로운 ë¡œìº˜ì„ ì¶”ê°€í•˜ë ¤ë©´ 다ìŒì´ 요구ëœë‹¤. .. MONETARYê°€ 없어질 것ì´ê¸° ë•Œë¬¸ì— "and currency"ê°€ ì‚ì œ ë˜ì—ˆë‹¤. * ìº˜ë¦°ë” ì •ë³´ë¥¼ 명시한다(CUBRID ë‚ ì§œ í¬ë§·, ì›” ë° ìš”ì¼ ì´ë¦„ì˜ ë‹¤ì–‘í•œ í¬ë§·, ì˜¤ì „/ì˜¤í›„ì— ëŒ€í•œ ì´ë¦„). CUBRID는 ìº˜ë¦°ë” ì •ë³´ë¥¼ 명시하기 위해 ê·¸ë ˆê³ ë¦¬ë ¥ë§Œ ì§€ì›í•œë‹¤(ì¼ë°˜ì ì¸ LDMLì€ CUBRIDê°€ ì§€ì›í•˜ì§€ 않는 다른 ìº˜ë¦°ë” íƒ€ìž…ì„ ì§€ì›í•œë‹¤). * ìˆ«ìž ì„¤ì •ì„ ëª…ì‹œí•œë‹¤(ìžë¦¿ìˆ˜ 구분 기호) * ì•ŒíŒŒë²³ì„ ì œê³µí•œë‹¤(대소문ìžì— 대한 ê·œì¹™ì˜ ì§‘í•©) * 옵션으로, ì¼ë¶€ ì½œë ˆì´ì…˜ì´ 추가ë 수 있다. * ë˜í•œ 옵션으로, Windows CSQL ì‘ìš©ì— ëŒ€í•œ 콘솔 변환 ê·œì¹™ì´ ì •ì˜ë 수 있다. LDML ìº˜ë¦°ë” ì •ë³´ ---------------- * 첫 번째 ë¶€ë¶„ì€ **DATE**, **DATETIME**, **TIME**, **TIMESTAMP**, **DATETIME WITH TIME ZONE** ë° **TIMESTAMP WITH TIME ZONE** ë°ì´í„°ì™€ 문ìžì—´ ê°„ì˜ íƒ€ìž…ë³€í™˜ì„ ìœ„í•œ 기본 CUBRID 형ì‹ìœ¼ë¡œ ì´ë£¨ì–´ì§„다. ì´ í˜•ì‹ì€ :func:`TO_DATE`, :func:`TO_TIME`, :func:`TO_DATETIME`, :func:`TO_TIMESTAMP`, :func:`TO_CHAR`, :func:`TO_DATETIME_TZ`, :func:`TO_TIMESTAMP_TZ` 함수ì—서 사용ëœë‹¤. 허용ë˜ëŠ” í˜•ì‹ ìš”ì†ŒëŠ” ë°ì´í„° íƒ€ìž…ì— ë”°ë¼ ë‹¤ë¥´ë©° :func:`TO_CHAR` 함수(:ref:`Date/Time Format 1 <datetime-format1>`)ì—서 사용ëœë‹¤. ì´ í˜•ì‹ì˜ 문ìžì—´ì—는 ASCII 문ìžë§Œ 허용ëœë‹¤. **DATE** ë° **TIME** 형ì‹ì€ 30ë°”ì´íЏ(문ìž), **DATETIME** ë° **TIMESTAMP** 형ì‹ì€ 48ìž, **DATETIME WITH TIME ZONE** ë° **TIMESTAMP WITH TIME ZONE** ì€ 70ìžê¹Œì§€ 허용ëœë‹¤. * <months>는 긴 형ì‹ê³¼ ì¶•ì•½ëœ í˜•ì‹ ë‘˜ ë‹¤ì— ëŒ€í•œ ì›” ì´ë¦„ì´ í•„ìš”í•˜ë‹¤. 허용ë˜ëŠ” í¬ê¸°ëŠ” ì¶•ì•½ëœ í˜•ì‹ì— 대해 15ìž(ë˜ëŠ” 60 ë°”ì´íЏ)ì´ê³ 긴 형ì‹ì— 대해 25ìž(ë˜ëŠ” 100ë°”ì´íЏ)ì´ë‹¤. * <days>는 긴 형ì‹ê³¼ ì¶•ì•½ëœ í˜•ì‹ ë‘˜ ë‹¤ì— ëŒ€í•œ ìš”ì¼ ì´ë¦„ì´ í•„ìš”í•˜ë‹¤. 허용ë˜ëŠ” í¬ê¸°ëŠ” ì¶•ì•½ëœ í˜•ì‹ì— 대해 10ìž(ë˜ëŠ” 40 ë°”ì´íЏ)ì´ê³ 긴 형ì‹ì— 대해 15ìž(ë˜ëŠ” 60 ë°”ì´íЏ)ì´ë‹¤. * <dayperiods> 서브 트리는 ì˜¤ì „/오후 형ì‹ì˜ 변형(타입 ì†ì„±ì— ë”°ë¼ ë‹¬ë¼ì§)ì— ëŒ€í•œ 문ìžì—´ì„ ì •ì˜í•œë‹¤. 허용ë˜ëŠ” í¬ê¸°ëŠ” 10ìž(ë˜ëŠ” 40ë°”ì´íЏ)ì´ë‹¤. 월과 ìš”ì¼ ì´ë¦„ì€ ê¸´ í¬ë§·ê³¼ ì¶•ì•½ëœ í¬ë§· 둘 다 카멜 표기 형ì‹(Camel case case format, 첫 문ìžëŠ” 대문ìž, 나머지 문ìžëŠ” 소문ìž)으로 명시ë˜ì–´ì•¼ 한다. CUBRID는 최대로 í—ˆìš©ëœ í¬ê¸°ë¥¼ ë°”ì´íЏ 단위로 검사한다. 문ìžì˜ í¬ê¸°ëŠ” UTF-8 문ìžì˜ 최대 í¬ê¸°ì— 해당하는 4ë°”ì´íŠ¸ë¡œë§Œ 계산ë˜ë¯€ë¡œ, 100ê°œì˜ ASCII 문ìžë¡œë§Œ êµ¬ì„±ëœ ì›” ì´ë¦„ì„ ì„¤ì •í•˜ëŠ” ê²ƒì´ ê°€ëŠ¥í•˜ë‹¤(25ìž ì œí•œì€ ì›” ì´ë¦„ì˜ ê° ë¬¸ìžê°€ 4ë°”ì´íŠ¸ë¡œ ì¸ì½”ë”©ëœ UTF-8 문ìžì¸ 경우ì´ë‹¤). .. LDML Numbers and currency information .. currency part will not be used because it is used only in MONETARY, and MONETARY will be deprecated. .. keep the currency related info as comments for the future.(if currency part is revised, it's explanation can be used again.) LDML ìˆ«ìž ì •ë³´ -------------- * <symbols> 태그는 ì •ìˆ˜ì™€ 소수 ë¶„í• ê¸°í˜¸ 문ìžì™€ ìžë¦¿ìˆ˜ 구분 기호 문ìžë¥¼ ì •ì˜í•œë‹¤. CUBRID는 ì´ ê¸°í˜¸ë“¤ì— ëŒ€í•´ ASCII ê¸°í˜¸ë§Œì„ ê¸°ëŒ€í•˜ë©°, 공백 문ìžëŠ” 허용하지 않는다. CUBRID는 3ê°œì˜ ìˆ«ìžë¥¼ 그룹지어 ìžë¦¿ìˆ˜ë¥¼ 구분한다. .. below is commented out. .. * The <currency> tag defines the three letter ISO 4217 code (http://en.wikipedia.org/wiki/ISO_4217) for default currency of the locale. Only one currency for locale is allowed. Setting the currency, instructs CUBRID how to interpret conversions were MONETARY data type is implied (:func:`TO_NUMBER`). .. CUBRID supports a limited number of currencies. +------------------------+----------------------+ | Currency ISO symbol | Meaning | +========================+======================+ | USD | dollar sign | +------------------------+----------------------+ | JPY | japanese yen | +------------------------+----------------------+ | GBP | british pound | +------------------------+----------------------+ | KRW | Korean won | +------------------------+----------------------+ | TRY | turkish lira | +------------------------+----------------------+ | KHR | cambodian riel | +------------------------+----------------------+ | CNY | chinese renminbi | +------------------------+----------------------+ | INR | indian rupee | +------------------------+----------------------+ | RUB | russian ruble | +------------------------+----------------------+ | AUD | australian dollar| +------------------------+----------------------+ | CAD | canadian dollar | +------------------------+----------------------+ | BRL | brasilian real | +------------------------+----------------------+ | RON | romanian leu | +------------------------+----------------------+ | EUR | euro | +------------------------+----------------------+ | CHF | swiss franc | +------------------------+----------------------+ | DKK | danish krone | +------------------------+----------------------+ | NOK | norwegian krone | +------------------------+----------------------+ | BGN | bulgarian lev | +------------------------+----------------------+ | VND | vietnamese dong | +------------------------+----------------------+ | CZK | Czech koruna | +------------------------+----------------------+ | PLN | Polish zloty | +------------------------+----------------------+ | SEK | Swedish krona | +------------------------+----------------------+ | HRK | Croatian kuna | +------------------------+----------------------+ | RSD | serbian dinar | +------------------------+----------------------+ LDML 알파벳 ----------- LDML ì•ŒíŒŒë²³ì€ ë¡œìº˜ì˜ ì•ŒíŒŒë²³ì— ëŒ€í•œ ëŒ€ì†Œë¬¸ìž ê·œì¹™ì„ ì •ì˜í•œë‹¤. 'CUBRIDAlphabetMode' ì†ì„±ì€ 문ìžì— 대한 ë°ì´í„°ì˜ 기본 ì›ë³¸(primary source)ì„ ì •ì˜í•œë‹¤. ì¼ë°˜ì 으로 ì´ ì†ì„±ì€ "UNICODEDATAFILE"로 ì§€ì •ë˜ì–´ì•¼ 하는ë°, ì´ ê°’ì€ CUBRIDê°€ ìœ ë‹ˆì½”ë“œ ë°ì´í„° 파ì¼(**$CUBRID/locales/data/unicodedata.txt**) ì„ ì‚¬ìš©í•œë‹¤ëŠ” ì˜ë¯¸ì´ë‹¤. ì´ íŒŒì¼ì€ ìˆ˜ì •ë˜ì–´ì„œëŠ” 안 ë˜ë©°, íŠ¹ì • 문ìžì— 대한 ë³€ê²½ì€ LDML 파ì¼ì—서 ì´ë£¨ì–´ì ¸ì•¼ 한다. ì´ëŸ¬í•œ ê°’ì´ ì„¤ì •ë˜ì–´ 있는 경우, 코드í¬ì¸íЏ 65535ê¹Œì§€ì˜ ëª¨ë“ ìœ ë‹ˆì½”ë“œ 문ìžê°€ ëŒ€ì†Œë¬¸ìž ì •ë³´ë¥¼ ê°€ì§€ê³ ë¡œë”©ëœë‹¤. 'CUBRIDAlphabetMode'ì— ëŒ€í•´ í—ˆìš©ëœ ë‹¤ë¥¸ ê°’ì€ "ASCII"로, ASCII 문ìžë§Œì´ 소문ìž, ëŒ€ë¬¸ìž ë˜ëŠ” ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ì„ í•˜ì§€ 않는 문ìžì—´ ë¹„êµ í•¨ìˆ˜ì—서 사용ë 수 있다. "ASCII"는 CUBRIDê°€ ëª¨ë“ UTF-8 (4ë°”ì´íЏ) ì¸ì½”딩 문ìžë¥¼ ì§€ì›í•˜ëŠ” ê¸°ëŠ¥ì— ì˜í–¥ì„ 주는 ê²ƒì´ ì•„ë‹ˆë¼, íŠ¹ì • 문ìžê°€ 대소문ìžë¥¼ 구분하는 ê¸°ëŠ¥ì— í¬í•¨ë˜ì§€ 않ë„ë¡ ì œí•œí• ë¿ì´ë‹¤. ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ ê·œì¹™ì€ ì„ íƒì ì´ë©° ë¬¸ìž ì •ë³´(UNICODEDATAFILE ë˜ëŠ” ASCII)ì˜ ê¸°ë³¸ ì›ë³¸ 중 가장 ìš°ì„ ì 으로 ì ìš©ëœë‹¤. CUBRID는 ëŒ€ë¬¸ìž ê·œì¹™(<u> 태그) ì •ì˜ì™€ ì†Œë¬¸ìž ê·œì¹™(<l> 태그) ì •ì˜ë¥¼ 허용한다. ëŒ€ë¬¸ìž ê·œì¹™ê³¼ ì†Œë¬¸ìž ê·œì¹™ ê°ê°ì€ ì›ë³¸-대ìƒ(<s> = source, <d> destination)ì˜ ìŒìœ¼ë¡œ ëœ êµ¬ì„±ì„ ì„¤ì •í•œë‹¤. 예를 들어, 다ìŒì€ ë¬¸ìž "A"ì˜ ì†Œë¬¸ìžê°€ "aa"(2ê°œì˜ "a" 문ìž)ê°€ ë˜ë„ë¡ ì •ì˜í•œë‹¤. .. code-block:: xml <l> <s>A</s> <d>aa</d> </l> LDML 콘솔 변환 -------------- Windowsì—서 ì½˜ì†”ì€ UTF-8 ì¸ì½”ë”©ì„ ì§€ì›í•˜ì§€ 않으므로, CUBRID는 UTF-8 ì¸ì½”ë”©ì„ ì›í•˜ëŠ” ì¸ì½”딩으로 번ì—하ë„ë¡ í—ˆìš©í•œë‹¤. ë¡œìº˜ì— ëŒ€í•œ 콘솔 ë³€í™˜ì„ ì„¤ì •í•œ 후ì—, 사용ìžëŠ” CSQL ì‘ìš© í”„ë¡œê·¸ëž¨ì„ ì‹œìž‘í•˜ê¸°ì— ì•žì„œ 'chcp' ëª…ë ¹(LDMLì—서 codepage ì†ì„±ì€ 'windows_codepage' ì†ì„±ê³¼ 매ì¹ë˜ì–´ì•¼ 한다)ì„ ì‚¬ìš©í•˜ì—¬ ì½˜ì†”ì˜ ì½”ë“œíŽ˜ì´ì§€ë¥¼ ì„¤ì •í•´ì•¼ 한다. CSQL ìž…ì¶œë ¥ 시 ë³€í™˜ì€ ì–‘ë°©í–¥ìœ¼ë¡œ ë™ìž‘하지만, ì„¤ì •ëœ ì½”ë“œíŽ˜ì´ì§€ë¡œì„œ 변환ë 수 있는 ìœ ë‹ˆì½”ë“œ 문ìžë¡œë§Œ ì œí•œëœë‹¤. <consoleconversion> ì›ì†ŒëŠ” ì„ íƒì ì´ë©° CSQLì´ ì¸í„°ë ‰í‹°ë¸Œ ëª…ë ¹ì—서 í…스트를 ì¶œë ¥(ë¬¸ìž ì¸ì½”딩)하는 ë°©ë²•ì„ ì§€ì‹œí•˜ê²Œ 한다. 'type' ì†ì„±ì€ ë³€í™˜ì— ëŒ€í•œ 계íš(scheme)ì„ ì •ì˜í•œë‹¤. 허용ë˜ëŠ” ê°’ì€ ë‹¤ìŒê³¼ 같다. * ISO: ëŒ€ìƒ ì½”ë“œ 페ì´ì§€ê°€ ë‹¨ì¼ ë°”ì´íЏ 문ìžì…‹ì¸ ì¼ë°˜ì ì¸ ê³„íš(generic scheme) * ISO88591: ISO-8859-1 문ìžì…‹ì— 대해 미리 ì¤€ë¹„ëœ ë‹¨ì¼ ë°”ì´íЏ 계íš('file' ì†ì„±ì„ 필요로 하지 않으며, 있으면 무시ë¨) * ISO88599: ISO-8859-9 문ìžì…‹ì— 대해 미리 ì¤€ë¹„ëœ ë‹¨ì¼ ë°”ì´íЏ 계íš(ì—시 'file' ì†ì„±ì„ 필요로 하지 않ìŒ) * DBCS: Double Byte Code-Set. ì´ê²ƒì€ ëŒ€ìƒ ì½”ë“œíŽ˜ì´ì§€ê°€ 2ë°”ì´íЏ 문ìžì…‹ì¸ ì¼ë°˜ì ì¸ ê³„íšì´ë‹¤. 'windows_codepage'는 CUBRIDê°€ 콘솔 ë³€í™˜ì„ ìžë™ìœ¼ë¡œ 활성화하는 Windows 코드페ì´ì§€ì— 대한 ê°’ì´ë‹¤. 'linux_charset'ì€ UNIX 계열 ì‹œìŠ¤í…œì˜ **LANG** 환경 변수ì—서 문ìžì…‹ 부분과 ë™ì¼í•œ ê°’ì´ë‹¤. Linux 콘솔ì—서는 ì›ëž˜ì˜ CUBRID 문ìžì…‹ì„ 사용하기를 권장한다. 'file' ì†ì„±ì€ 'type' ì†ì„±ì˜ ê°’ì´ "ISO"와 "DBCS"ì¸ ê²½ìš°ì—ë§Œ 요구ë˜ë©° ë²ˆì— ì •ë³´(**$CUBRID/locales/data/codepages/**)를 í¬í•¨í•˜ëŠ” 파ì¼ì´ë‹¤. LDML ì½œë ˆì´ì…˜ ------------- ì½œë ˆì´ì…˜ì„ ì„¤ì •í•˜ëŠ” ê²ƒì€ CUBRIDì—서 LDML ë¡œìº˜ì„ ì¶”ê°€í• ë•Œ 가장 복잡한 작업ì´ë‹¤. UTF-8 ì½”ë“œì…‹ì„ ê°€ì§„ ì½œë ˆì´ì…˜ë§Œ ì„¤ì •ë 수 있다. CUBRID는 축약과 í™•ìž¥ì„ í¬í•¨í•˜ëŠ” UCA(Unicode Collation Algorithm, http://www.unicode.org/reports/tr10/)ì— ì˜í•´ ëª…ì‹œëœ ëŒ€ë¶€ë¶„ì˜ êµ¬ì„±ì„ ì„¤ì •í•˜ëŠ” ê²ƒì„ í—ˆìš©í•˜ì§€ë§Œ, ì½œë ˆì´ì…˜ì— 대한 ì†ì„±ì€ 대부분 'settings' ì†ì„±ì„ 통해 ì œì–´ëœë‹¤. LDML 파ì¼ì€ 여러 ê°œì˜ ì½œë ˆì´ì…˜ì„ í¬í•¨í• 수 있다. ì½œë ˆì´ì…˜ì€ 'include' 태그를 사용하여 외부 파ì¼ì— ì˜í•´ í¬í•¨ë 수 있다. 'collations' íƒœê·¸ì˜ 'validSubLocales' ì†ì„±ì€ 외부 파ì¼ì— ì˜í•œ 외부 ì½œë ˆì´ì…˜ì´ í¬í•¨ë 때 로캘 컴파ì¼ì„ ì œì–´í•˜ë„ë¡ í—ˆìš©í•˜ëŠ” í•„í„°ì´ë‹¤. ì´ ì†ì„±ì˜ ê°’ì€ ë¡œìº˜ì˜ ë¦¬ìŠ¤íŠ¸ í˜¹ì€ "*"ì´ ë 수 있으며, "*"ì„ ì‚¬ìš©í•˜ë©´ ì„œë¸ŒíŠ¸ë¦¬ì— ìžˆëŠ” ì½œë ˆì´ì…˜ì´ ëª¨ë“ ë¡œìº˜ì— ì¶”ê°€ëœë‹¤. í•˜ë‚˜ì˜ ì½œë ˆì´ì…˜ì€ 'collation' 태그와 서브트리를 사용하여 ì •ì˜ëœë‹¤. 'type' ì†ì„±ì€ ì½œë ˆì´ì…˜ì— 대한 ì´ë¦„ì„ ë‚˜íƒ€ë‚´ë¯€ë¡œ CUBRIDì— ì¶”ê°€ë 것ì´ë‹¤. 'settings' 태그는 ì½œë ˆì´ì…˜ì˜ ì†ì„±ë“¤ì„ ì •ì˜í•œë‹¤. * 'id'는 CUBRIDì—서 사용ë˜ëŠ” (ë‚´ë¶€ì˜) ìˆ«ìž ì‹ë³„ìžì´ë‹¤. 32부터 255ê¹Œì§€ì˜ ì •ìˆ˜ì´ë©° ì„ íƒì ì´ì§€ë§Œ, í• ë‹¹ë˜ì§€ ì•Šì€ ê°’ì˜ ëª…ì‹œì ì¸ ì„¤ì •ì„ ê°•ë ¥ížˆ 권장한다. :ref:`collation-naming-rules`\ ì„ ì°¸ê³ í•œë‹¤. * 'strength'는 문ìžì—´ ë¹„êµ ë°©ë²•ì˜ ì²™ë„ì´ë‹¤. :ref:`collation-properties`\ ì„ ì°¸ê³ í•œë‹¤. 허용ë˜ëŠ” ê°’ì€ ë‹¤ìŒê³¼ 같다. * "quaternary": 서로 ê°™ì€ ë¬¸ìžì´ë‚˜ 다른 그래픽 기호ì´ë©´ 다르게 비êµë˜ì§€ë§Œ, 다른 ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íŠ¸ê°€ 같게 비êµë 수 있다. * "tertiary": 서로 ê°™ì€ ë¬¸ìžì˜ 그래픽 ì‹¬ë³¼ì€ ë™ì¼í•˜ë©°, 대소문ìžë¥¼ 구분하는 ì½œë ˆì´ì…˜ì´ë‹¤. * "secondary": ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 없는 ì½œë ˆì´ì…˜ì´ë©°, 액센트가 있는 ë¬¸ìž ì‚¬ì´ì˜ ë¹„êµ ê²°ê³¼ê°€ 다르다. * "primary": 액센트는 무시ë˜ë©°, ëª¨ë“ ë¬¸ìžëŠ” 기본(base) 문ìžë¡œ 비êµëœë‹¤. * 'caseLevel': 'strength' ê°’ì´ "tertiary" 보다 ìž‘ì€ ê°’ì„ ê°€ì§€ëŠ” ì½œë ˆì´ì…˜ì— 대해 ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ 있는 비êµë¥¼ 가능하게 하는 특별한 ì„¤ì •. ìœ íš¨í•œ ê°’ì€ "on" ë˜ëŠ” "off"ì´ë‹¤. * 'caseFirst': ëŒ€ì†Œë¬¸ìž ìˆœì„œ. ìœ íš¨í•œ ê°’ì€ "lower", "upper" ê·¸ë¦¬ê³ "off"ì´ë‹¤. "upper" ê°’ì€ ëŒ€ë¬¸ìžê°€ ê°™ì€ ë¬¸ìžì˜ 소문ìžë³´ë‹¤ ì•žì„ ë‹¤ëŠ” ì˜ë¯¸ì´ë‹¤. * 'CUBRIDMaxWeights': ì½œë ˆì´ì…˜ì—서 사용ìžì— ì˜í•´ ì •ì˜ëœ(customized) 코드í¬ì¸íŠ¸ì˜ ê°œìˆ˜(ë˜ëŠ” 최종 코드í¬ì¸íЏ + 1). 최대 ê°’ì€ 65536ì´ë‹¤. ì´ ê°’ì„ ëŠ˜ë¦¬ë©´ ì½œë ˆì´ì…˜ ë°ì´í„°ì˜ í¬ê¸°ê°€ 늘어난다. * 'DUCETContractions': ìœ íš¨í•œ ê°’ì€ "use" ë˜ëŠ” "ignore"ì´ë‹¤. "use"ê°€ 명시ë˜ë©´ ($CUBRID/locales/data/ducet.txt)ì— ì˜í•´ ì •ì˜ëœ ì¶•ì•½ì„ ì½œë ˆì´ì…˜ì—서 ì‚¬ìš©í• ìˆ˜ 있다. "ignore"ì´ë©´ ì •ì˜ëœ ì¶•ì•½ì„ ë¬´ì‹œí•œë‹¤. * 'TailoringContractions': 위와 같으나 ëª…ì‹œëœ ì½œë ˆì´ì…˜ 규칙으로부터 ì •ì˜ë˜ê±°ë‚˜ 추출ëœ(derived) ì¶•ì•½ì„ ì˜ë¯¸í•œë‹¤. ì¶•ì•½ì„ ì‚¬ìš©í•˜ë©´ 보다 복잡한 ì½œë ˆì´ì…˜(ë” ëŠë¦° 문ìžì—´ 비êµ)ì´ ëœë‹¤. * 'CUBRIDExpansions': 허용ë˜ëŠ” ê°’ì€ "use" ë˜ëŠ” "ignore"(기본값)ì´ë©° DUCET 파ì¼ê³¼ ì‚¬ìš©ìž ì •ì˜ ê·œì¹™ 둘 다ì—서 ì½œë ˆì´ì…˜ í™•ìž¥ì„ ì‚¬ìš©í•¨ì„ ì˜ë¯¸í•œë‹¤. 'CUBRIDExpansions'ì€ ì½œë ˆì´ì…˜ ì†ì„±ì—서 가장 í° ì˜í–¥ì„ 준다. ì´ê²ƒì„ 가능하게 하면 문ìžì—´ì„ 비êµí• 때 여러 단계(ì½œë ˆì´ì…˜ 세기까지)로 비êµí•˜ê²Œ ë˜ë©°, ë” "ìžì—°ìŠ¤ëŸ¬ìš´" ì •ë ¬ 순서를 ì–»ì„ ìˆ˜ 있는 ì´ì ì´ ìžˆì§€ë§Œ ì½œë ˆì´ì…˜ ë°ì´í„°ë¥¼ í¬ê²Œ ì¦ê°€ì‹œí‚¨ë‹¤. :ref:`expansion`\ ì„ ì°¸ê³ í•œë‹¤. * 'backwards': "on" ë˜ëŠ” "off" ê°’ì´ ì‚¬ìš©ëœë‹¤. ì•¡ì„¼íŠ¸ì— ëŒ€í•´ 문ìžì—´ì˜ ëì—서 앞으로 비êµë˜ëŠ” "french" 순서를 ì 용하기 위해 사용ëœë‹¤. ì´ ê°’ì€ 'CUBRIDExpansions'ì´ "use"ì¼ ë•Œë§Œ ì ìš©ëœë‹¤. * 'MatchContractionBoundary': "true" ë˜ëŠ” "false". ì´ ê°’ì€ ì¶•ì•½ì´ ì§€ì •ë 때 문ìžì—´ 매ì¹ì—ì„œì˜ ë™ìž‘ì„ ì„¤ì •í•˜ê¸° 위해 확장과 ì¶•ì•½ì„ ê°€ì§€ëŠ” ì½œë ˆì´ì…˜ì—서 사용ëœë‹¤. ì½œë ˆì´ì…˜ì— 대한 주요 ë°ì´í„°ëŠ” DUCET 파ì¼ì—서 ì½í˜€ì§„다. ì´ ë‹¨ê³„ ì´í›„, ì½œë ˆì´ì…˜ì€ "ì‚¬ìš©ìž ì •ì˜ ê·œì¹™(tailoring rules)"ì— ì˜í•´ 명시ë 수 있다. ì´ ê·œì¹™ë“¤ì€ "<rules>" (LDML)와 "<cubridrules>" (CUBRID ì „ìš©)ì´ë‹¤. 'cubridrules' 태그는 ì„ íƒì ì´ë©° 코드í¬ì¸íЏ ë˜ëŠ” 코드í¬ì¸íŠ¸ì˜ ë²”ìœ„ì— ëŒ€í•œ 가중치를 명시ì 으로 ì„¤ì •í•˜ëŠ”ë° ì‚¬ìš©ë 수 있다. 'cubridrules'는 DUCET 파ì¼ë¡œë¶€í„° 기본(primary) ì½œë ˆì´ì…˜ì„ 로딩한 후 '<rules>' íƒœê·¸ì— ì •ì˜ëœ UCA ê·œì¹™ì´ ì ìš©ë˜ê¸° ì „ì— ì ìš©ëœë‹¤. ê° ê·œì¹™ì€ '<set>' 태그로 닫힌다. ê·œì¹™ì´ í•˜ë‚˜ì˜ ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íŠ¸ë§Œì„ ì–¸ê¸‰í•˜ëŠ” 경우, 코드í¬ì¸íŠ¸ì˜ 16진수 ê°’ì„ í¬í•¨í•˜ëŠ” '<scp>' 태그가 ì œê³µëœë‹¤. ëª¨ë“ ì‚¬ìš© 가능한 CUBRID ì½œë ˆì´ì…˜ì€ 다ìŒê³¼ ê°™ì€ CUBRID ê·œì¹™ì„ í¬í•¨í•œë‹¤. .. code-block:: xml <cubridrules> <set> <scp>20</scp> <w>[0.0.0.0]</w> </set> </cubridrules> ì´ ê·œì¹™ì€ 20(ASCII ë„어쓰기 문ìž)으로 시작하는 코드í¬ì¸íŠ¸ì˜ ê°€ì¤‘ì¹˜(UCA는 ì½œë ˆì´ì…˜ ì›ì†Œ 당 네 ê°œì˜ ê°€ì¤‘ì¹˜ë¥¼ ì •ì˜)ê°€ ëª¨ë‘ 0으로 ì„¤ì •ëœë‹¤ëŠ” ê²ƒì„ ë‚˜íƒ€ë‚¸ë‹¤. '<ecp>' 태그가 없기 ë•Œë¬¸ì— ì˜í–¥ì„ 받는 ìœ ì¼í•œ 코드í¬ì¸íŠ¸ëŠ” 20ì´ë‹¤. CUBRIDì—서 ë„어쓰기 문ìžëŠ” 0으로 비êµëœë‹¤. '<set>' 규칙ì—서 허용ë˜ëŠ” 태그는 다ìŒê³¼ 같다. * '<cp>': í•˜ë‚˜ì˜ ì½”ë“œí¬ì¸íŠ¸ì— ëŒ€í•œ 가중치를 ì„¤ì •í•˜ëŠ” 규칙 * '<ch>': í•˜ë‚˜ì˜ ë¬¸ìžì— 대한 가중치를 ì„¤ì •í•˜ëŠ” 규칙. ìœ„ì˜ ê²ƒê³¼ 비슷하지만, 코드í¬ì¸íЏ ëŒ€ì‹ ì´ê²ƒì€ ìœ ë‹ˆì½”ë“œ 문ìž(UTF-8 encoding)를 기대한다. * '<scp>': 코드í¬ì¸íŠ¸ì˜ ë²”ìœ„ì— ëŒ€í•œ 가중치를 ì„¤ì •í•˜ëŠ” 규칙. ì´ê²ƒì´ 시작 코드í¬ì¸íЏì´ë‹¤. * '<sch>': 문ìžì˜ ë²”ìœ„ì— ëŒ€í•œ 가중치를 ì„¤ì •í•˜ëŠ” 규칙. ì´ê²ƒì´ 시작 문ìžì´ë‹¤. 문맥ì—서, 문ìžì˜ 순서는 ìœ ë‹ˆì½”ë“œ 코드í¬ì¸íŠ¸ì— ì˜í•´ 주어진다. * '<ecp>': 범위 ê·œì¹™ì— ëŒ€í•œ ë 코드í¬ì¸íЏ. * '<ech>': 범위 ê·œì¹™ì— ëŒ€í•œ ë 문ìž. * '<w>': ì„¤ì •í• ê°€ì¤‘ì¹˜(ë‹¨ì¼ ê°’). 가중치는 16진수ì´ë‹¤. ê° ì½œë ˆì´ì…˜ ì›ì†ŒëŠ” ì 으로 구분ë˜ëŠ” 네 ê°œì˜ ê°’ì„ ê°€ì§€ë©°, ì´ ê°’ë“¤ì€ ê°ê´„호([])로 ê°ì‹¸ì§„다. 10ê°œì˜ ì½œë ˆì´ì…˜ ì›ì†Œê¹Œì§€ í¬í•¨í• 수 있다. * '<wr>': ë²”ìœ„ì— ëŒ€í•´ ì„¤ì •í•˜ëŠ” 시작 가중치. ì„ íƒì 으로, ì´ íƒœê·¸ì—는 'step' ì†ì„±ì´ ìžˆëŠ”ë° ì´ëŠ” ê° ì½”ë“œí¬ì¸íЏ ë’¤ì— ì¦ê°€í•˜ëŠ” 단계를 ì„¤ì •í•œë‹¤. 기본 단계는 [0001.0000.0000.0000]ì¸ë°, ì´ê²ƒì€ 시작 코드í¬ì¸íŠ¸ì— ëŒ€í•œ 첫번째 가중치를 ì„¤ì •í•œ 후, í•˜ë‚˜ì˜ ê°’ì´ ì²« 번째 수준(primary level) ê°€ì¤‘ì¹˜ì— ì¶”ê°€ë˜ê³ ë‹¤ìŒ ì½”ë“œí¬ì¸íŠ¸ê¹Œì§€ 범위로 ì„¤ì •ë¨ì„ ì˜ë¯¸í•˜ë©°, ì´ ì ˆì°¨ëŠ” 마지막 코드í¬ì¸íŠ¸ê¹Œì§€ 반복ëœë‹¤. 예: .. code-block:: xml <cubridrules> <set> <!-- Rule 1 --> <scp>0</scp> <ecp>20</ecp> <w>[0.0.0.0]</w> </set> <set> <!-- Rule 2 --> <scp>30</scp> <ecp>39</ecp> <wr step="[1.0.0.0][1.0.0.0]">[30.0.0.0][30.0.0.0]</wr> </set> </cubridrules> Rule 1ì€, 가중치 0ì„ í¬í•¨í•˜ì—¬ 0부터 20ê¹Œì§€ì˜ ì½”ë“œí¬ì¸íŠ¸ë¥¼ ì„¤ì •í•œë‹¤. Rule 2는, 30부터 39(10진수)ê¹Œì§€ì˜ ì½”ë“œí¬ì¸íŠ¸ì™€ ì¦ê°€í•˜ëŠ” 가중치를 가진 ë‘ ê°œì˜ ì½œë ˆì´ì…˜ ì›ì†Œì˜ ì§‘í•©ì„ ì„¤ì •í•œë‹¤. ì´ ì˜ˆì—서, 코드í¬ì¸íЏ 39(ë¬¸ìž "9")는 2ê°œì˜ ì½œë ˆì´ì…˜ ì›ì†Œ[39.0.0.0][39.0.0.0]를 ë³´ìœ í•˜ëŠ” 가중치를 가질 것ì´ë‹¤. '<rules>' 태그 ë˜í•œ ì„ íƒì ì¸ë°, LDMLê³¼ UCA ëª…ì„¸ì— ë”°ë¼ ì •í•´ì§„ë‹¤. 하위 íƒœê·¸ì˜ ì˜ë¯¸ëŠ” 다ìŒê³¼ 같다. * '<reset>': ì½œë ˆì´ì…˜ ì›ì†Œë¥¼ ì§€ì •í•œë‹¤. ì´ íƒœê·¸ì˜ ì •ì˜(다ìŒì— 나타나는 '<reset>' 태그까지)ì— ì˜í•´ ë¬¸ìž ìˆœì„œì— ëŒ€í•œ ê·œì¹™ë“¤ì´ ì¡°ì •ëœë‹¤. 축약ì¸ì§€ 확장ì¸ì§€ì— ë”°ë¼ ì´ ê°’ì€ ë‹¨ì¼ ë¬¸ìžì…‹ì˜ 문ìžì´ê±°ë‚˜ 다중 문ìžì…‹ì˜ 문ìžê°€ ë 수 있다. 기본ì 으로, 앵커 ë’¤ì— ì˜¤ëŠ” ì‚¬ìš©ìž ì •ì˜ ê·œì¹™(tailoring rules)ì€ "ë’¤ì—(after)" ì •ë ¬ëœë‹¤(첫 번째 ê·œì¹™ì˜ ì›ì†ŒëŠ” 앵커 ë’¤ì— ì˜¤ë©°, ë‘ ë²ˆì§¸ ê·œì¹™ì˜ ì›ì†ŒëŠ” 첫 번째 ê·œì¹™ì— ìžˆëŠ” ì›ì†Œ ë’¤ì— ì •ë ¬ë¨). ì„ íƒì ì†ì„± "before"ê°€ 존재하면, <reset> ë’¤ì— ì˜¤ëŠ” 첫 번째 규칙만 앵커 ì•žì— ì˜¤ëŠ” 반면, ë‘ ë²ˆì§¸ì™€ ì´í•˜ ê·œì¹™ë“¤ì€ ì¼ë°˜ì ì¸ "ë’¤(after)"ì˜ ì •ë ¬(ë‘ ë²ˆì§¸ ê·œì¹™ì— ìžˆëŠ” ì›ì†ŒëŠ” 첫 번째 ê·œì¹™ì— ìžˆëŠ” ì›ì†Œ ë’¤ì— ì •ë ¬ë¨)ì„ ìž¬ê°œí•œë‹¤. * '<p>': 첫 번째 수준(primary level)ì—서 미리 ì¡°ì •ëœ(tailored) 것 ë’¤(ë˜ëŠ” 앞, 앵커가 'before' ì†ì„±ì„ 가지는 경우)ì— ì˜¤ëŠ” 문ìž. * '<s>': ë‘ ë²ˆì§¸ 수준(secondary level)ì—서 미리 ì¡°ì •ëœ(tailored) 것 ë’¤(ë˜ëŠ” 앞, 앵커가 'before' ì†ì„±ì„ 가지는 경우)ì— ì˜¤ëŠ” 문ìž. * '<t>': 세 번째 수준(tertiary level)ì—서 미리 ì¡°ì •ëœ(tailored) 것 ë’¤(ë˜ëŠ” 앞, 앵커가 'before' ì†ì„±ì„ 가지는 경우)ì— ì˜¤ëŠ” 문ìž. * '<i>': 문ìžê°€ ì „ì˜ ê²ƒê³¼ ë™ë“±í•˜ê²Œ ì •ë ¬ëœë‹¤. * '<pc>', '<sc>', '<tc>', '<ic>': '<p>', '<s>', '<t>', '<i>'와 같지만 문ìžì˜ 범위를 ì 용한다. * '<x>': 확장 문ìžë¥¼ ì§€ì •í•œë‹¤. * '<extend>': í™•ìž¥ì˜ ë‘ ë²ˆì§¸ 문ìžë¥¼ ì§€ì •í•œë‹¤. * '<context>': ê·œì¹™ì´ ì ìš©ë˜ëŠ” ë¬¸ë§¥ì„ ì§€ì •í•œë‹¤. 축약과 í™•ìž¥ì„ ì§€ì •í•˜ëŠ” 변수. LDML ê·œì¹™ì„ ê°€ì§€ê³ UCA를 ì¡°ì •í•˜ëŠ” ê²ƒì— ëŒ€í•œ 보다 ìžì„¸í•œ ì •ë³´ëŠ” http://www.unicode.org/reports/tr35/tr35-collation.html\ 를 ì°¸ê³ í•œë‹¤. .. rubric:: Footnotes .. [#f1] 글리프(glyph): ê¸€ìž í•˜ë‚˜ì˜ ëª¨ì–‘ì— ëŒ€í•œ 기본 단위로 문ìžì˜ 모양ì´ë‚˜ 형태를 나타내는 그래픽 부호. 글리프는 ëˆˆì— ë³´ì´ëŠ” ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” 것으로서 í•˜ë‚˜ì˜ ê¸€ìžì— 대해 여러 ê°œì˜ ê¸€ë¦¬í”„ê°€ ì¡´ìž¬í• ìˆ˜ 있다.