Thứ Hai, 22 tháng 6, 2020

HỌC ORACLE DB TỪ A-Z - BÀI 21. TÍNH NĂNG HỖ TRỢ NGÔN NGỮ QUỐC GIA

NLS (National Language Support) cho phép các công cụ database và các thông báo lỗi, trật tự sắp xếp, thông tin ngày tháng, tiền tệ, con số và lịch được chuyển đổi tự động phù hợp với ngôn ngữ quốc gia người sử dụng.

21.1. NGÔN NGỮ QUỐC GIA
21.1.1.  Các đặc điểm chính
Các thao tác trên ngôn ngữ phụ thuộc được điều khiển bởi một số tham số và biến môi trường trên cả 2 phía Client và Server.
Server và Client có thể chạy trên cùng hoặc khác computer. Trong trường hợp client và server sử dụng các tập character set khác nhau, Oracle sẽ chuyển đổi các tập character set tự động.
Một số đặc điểm chính của NLS:
§  Hỗ trợ nhiều loại ngôn ngữ khác nhau.
§  Hỗ trợ nhiều quốc gia, lãnh thổ khác nhau.
§  Hỗ trợ nhiều loại tập ký tự (character set) sử dụng trong database.
§  Cho phép sắp xếp ký tự trên các loại ngôn ngữ của từng quốc gia.
§  Thông báo sử dụng tiếng địa phương.
§  Định dạng thời gian, ngày tháng theo định dạng của từng quốc gia.
§  Định dạng số theo khuôn dạng của từng quốc gia.
§  Định dạng tiền tệ theo khuôn dạng của từng quốc gia.

Hỗ trợ ngôn ngữ quốc gia
§  Các user có thể tương tác, lưu trữ, xử lývà truy xuất dữ liệu trong ngôn ngữ quốc gia của họ bao gồm các vùng sau: Tây Âu, Đông Âu, Trung Đông, Đông Nam Á và Bắc Á.
§  Các nước khác nhau và các vùng địa lí khác nhau được chỉ định bằng các chuyển đổi văn hoá khác nhau ảnh hưởng trực tiếp đến định dạng của dữ liệu.
§  Có rất nhiều tập kí tự khác nhau bao gồm tập kí  tự đơn (single_byte) và tập kí tự nhiều byte được hỗ trợ.
§  Các công cụ của database và các thông báo lỗi có thể hiển thị trong ngôn ngữ quốc gia của người dùng. Oracle hỗ trợ khoảng 26 ngôn ngữ khác nhau.
§  Các định dạng ngày tháng được định dạng cùng với các chuẩn ISO cho ngày tháng năm và giờ.
§  Dữ liệu số được định dạng tương ứng trên định dạng địa phương.
§  Các biểu tượng tiền tệ phản ánh kinh tế địa phương và chuyển đổi sang chuẩn ISO.

21.1.2.  Chọn tập kí tự cho database

Bộ mã kí tự chỉ định mã kí tự tương ứng mà một máy tính có thể hiển thị và nhận.
Bộ mã kí tự được dùng để biên dịch dữ liệu thành các biểu tượng có ý nghĩa hiển thị trên các máy tính.
Oracle hỗ trợ các bộ kí  tự sau:
§  Single_byte
§  Varying_width
§  Fixed_width
§  Unicode
Tập  kí tự Single_Byte
Tập kí tự Single_byte, trong mỗi kí tự chiếm một byte như vậy với bộ mã kí tự này có thể mã được 127 kí tự nếu bộ mã 7 bits, 256 kí tự nếu bộ mã 8 bits. Ví dụ các tập kí tự single_byte như US7ASCII, WE8ISO8859P1...

Tập kí tự Varying_Width nhiều byte
Một tập kí tự nhiều byte sử dụng nhiều byte cho một kí tự, các tập kí tự nhiều byte được sử dụng để hỗ trợ các ngôn ngữ châu Á. Một số tập kí tự nhiều byte sử dụng một số bits dấu (significant bits) để xác định tập kí tự sử dụng thuộc loại single_byte hay Varying_Width.
Một số ví dụ về các tập kí tự nhiều byte có độ rộng thay đổi: Japanese Extended Unix Code(JEUC), Chinese GB2312-80.

Tập kí tự  Fixed_Width nhiều byte
Tập kí tự nhiều byte có độ rộng không thay đổi được sử dụng giống như tập kí tự nhiều byte ngoại trừ là nó được định dạng với số bits không thay đổi cho một kí tự. Ví dụ các tập kí tự : JA 16EUCFIXED, 16 bits Japanese, JA 16SJISFIXED, 16 bits Japanese.

Tập kí tự Unicode
Unicode là tập kí tự chuẩn được sử dụng để hiển thị tất cả các kí tự của máy tính bao gồm các biểu tượng kĩ thuật và tập các kí tự dùng để hiển thị, tập các kí tự Unicode có thể hiển thị các kí tự dưới dạng mã khác nhau. Ví dụ: UCS2 được định dạng 2 bytes và có độ rộng không đổi, UTF8 là bộ mã nhiều byte có độ rộng thay đổi.

21.1.3.  Tập kí tự và tập kí tự quốc gia của database

Câu lệnh CREATE DATABASE có các mệnh đề: CHARACTER SET và NATIONAL CHARACTER SET để mô tả tập kí tự được sử dụng trong database. Cả hai tập kí tự này không thể thay đổi khi đã tạo database. Nếu mệnh đề NATIONAL CHARACTER SET không được chỉ ra trong câu lệnh tạo database thì database sẽ sử dụng tập kí tự tương ứng với CHARACTER SET.
Vì tập kí tự của database được sử dụng để xác định và lưu trữ các câu lệnh SQL và mã PL/SQL nên nó tương thích với tập ký tự EBCDIC hay 7-bit ASCII. Vì vậy, không thể sử dụng các tập kí tự nhiều bytes (multibyte character set) hay tập ký tự có độ rộng không đổi (fixed-width) như là tập kí tự sử dụngcho database. Ta chỉ có thể sử dụng các tập ký tự này như là tập ký tự thuộc loại NATIONAL CHARACTER SET mà thôi.
Các kiểu dữ liệu như NCHAR, NVARCHAR2 và NCLOB được cung cấp để khai báo các cột như là các biến thể của các kiểu cơ bản như CHAR, VARCHAR2 và CLOB. Chúng được lưu trữ và sử dụng với tập ký tự national character set chứ không phải là database character set.

Tập ký tự database
(Database Character Set)
Tập ký tự quốc gia
(National Character Set)
Xác định ngay khi tạo database
Xác định ngay khi tạo database
Không thể thay đổi lại sau khi đã tạo database
Không thể thay đổi lại sau khi đã tạo database
Lưu trữ dữ liệu theo các kiểu: CHAR, VARCHAR2, CLOB, LONG
Lưu trữ dữ liệu theo các kiểu: NCHAR, NVARCHAR2, NCLOB
Lưu trữ tập dữ liệu với độ dài thay đổi
Lưu trữ tập dữ liệu có độ dài cố định và cả thay đổi
§  Để mô tả một đối tượng kí tự có độ dài không thay đổi sử dụng national character set, sử dụng kiểu dữ liệu NCHAR[size]
§  Để mô tả một đối tượng kí tự có độ dài thay đổi mà sử dụng national character set, sử dụng kiểu NVARCHAR2[size].
§  Để mô tả một đối tượng kiểu  CLOB chứa  các kí tự nhiều byte dộ rộng không đổi sử dụng national character set, sử dụng kiểu dữ  liệu NCLOB[size].

Các hướng dẫn
Tập kí tự của database và tập kí tự quốc gia có thể quan hệ rất gần gũi, ví dụ: các khách hàng người nhật sẽ chọn tập kí tự JA!16EUC làm tập kí tự cho database và JA16EUCFIXED như là tập kí tự cho quốc gia.
Tìm kiếm trên các chuỗi kí tự với kiểu kí tự có độ rộng không đổi sẽ nhanh hơn so với tập kí tự có độ rông thay đổi.
Tập kí tự có độ rộng thay đổi sẽ sử dụng không gian hiệu quả hơn.

21.2.CÁC THAM SỐ NLS

21.2.1.  Lựa chọn tham số

Có ba cách chỉ định các tham số NLS:
§  Chỉ định tham số NLS thông qua tham số khởi tạo nằm trong parameter file của Server .
§  Sử dụng biến môi trường tại client. Thông số tại Client sẽ chép đè lên (overriding) tham số mặc định tương ứng tại server.
§  Chỉ định tham số thông qua lệnh ALTER SESSION. Giá trị mới của tham số sẽ chép đè lên giá trị cũ của tham số tương ứng của server.

Chỉ định các tham số phụ thuộc ngôn ngữ phía server
Các tham số khởi tạo  NLS_LANGUAGE quy định các giá trị đặc trưng cho ngôn ngữ (language-dependent) như:
§  Ngôn ngữ sử dụng trong các thông báo của Oracle.
§  Ngôn ngữ sử dụng đối với tên của ngày tháng.
§  Các biểu tượng cho AM, PM , A.D và B.C.
§  Thứ tự sắp xếp dữ liệu kí tự theo mặc định.
Các tham số  khởi tạo NLS_TERRITORY quy định các giá trị đặc trưng cho từng vùng lãnh thổ (territory).
Bao gồm:
§  Định dạng ngày tháng theo mặc định.
§  Dấu chấm thập phân, dấu phân cách hàng nghìn.
§  Biểu tượng tiền tệ quốc gia.
§  Biểu tượng tiền tệ chuẩn ISO
§  Ngày bắt đầu của tuần.

Chú ý:
Khi sử dụng các tham số đặc trưng cho từng vùng lãnh thổ nếu giá trị có khoảng trống trong thì cần đặt chúng trong dấu ngoặc kép. Ví dụ: “  The Netherlands

21.2.2.  Ngôn ngữ phụ thuộc và giá trị territory mặc định

Các giá trị mặc định
Tham số
Giá trị
NLS_LANGUAGE
       NLS_DATE_LANGUAGE
       NLS_SORT
AMERICAN
        AMERICAN
        BINARY
NLS_TERRITORY
       NLS_CURRENCY
       NLS_ISO_CURRENCY
       NLS_DATE_FORMAT
       NLS_NUMERIC_CHARACTERS
AMERICA
        $
        AMERICA
        DD-MON-YY
        ,.

Tham số khởi tạo NLS _LANGUAGE quyết định giá trị mặc định cho các tham số sau đây:
Tham số
Diễn giải
NLS_DATE_LANGUAGE
Thay đổi tường minh các định dạng về thời gian, ngày tháng
NLS_SORT
Thay đổi trật tự sắp xếp các ký tự trong database

NLS_TERRITORY quyết định giá trị mặc định cho các tham số sau đây:
Tham số
Diễn giải
NLS_CURRENCY
Thay đổi tường minh các ký tự biểu diễn tiền tệ
NLS_ISO_CURRENCY
Ký tự biểu diễn tiền tệ của quốc gia theo chuẩn ISO
NLS_DATE_FORMAT
Chỉ rõ định dạng ngày tháng
NLS_NUMERIC_CHARACTERS
Chỉ ra tường minh các ký tự biểu diễn trong số thập phân

21.2.3.  Xác định các biến môi trường

Chỉ định biến môi trường NLS_LANG
NLS_LANG=<language>_<territory>.<charset>
Thêm các biến môi trường :
NLS_DATE_FORMAT
NLS_DATE_LANGUAGE
NLS_SORT
NLS_NUMERIC_CHARACTERS
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_CALENDAR

Biến môi trường NLS_LANG
Sử dụng biến môi trường NLS_LANG để chép đè lên giá trị NLS mặc định sử dụng cho user. Xác định giá trị của tham số NLS_LANG:
NLS_LANG=<language>_<territory>.<charset>
Với:
language                      tên ngôn ngữ quốc gia sử dụng (là giá trị của tham số NLS_LANGUAGE).
territory                       đặc trưng vùng lãnh thổ (là giá trị của tham số NLS_TERRITORY).
charset             bộ mã kí tự sử dụng bởi ứng dụng phía client.
Ví dụ:
NLS_LANG=GERMAN_GERMAN.W8EISO8850P1
Tham số NLS_LANG quy định tập kí tự cho client. Các clients khác nhau có thể sử  dụng các bộ mã kí tự khác nhau. Dữ liệu truyền đi từ client tới server sẽ được chuyển đổi tự động từ tập kí tự sử dụng tại client sang tập kí tự sử dụng tại server. Việc chuyển đổi này là trong suốt đối với các ứng dụng tại client.

Các biến môi trường mở rộng
Các tham số khởi tạo NLS đều có thể khai báo dưới dạng biến môi trường, chúng quy định các đặc trưng ngôn ngữ sử dụng tại mỗi clients. Tham số NLS_CALENDAR được sử dụng để chọn hệ thống lịch mà Oracle sẽ sử dụng.
Một số tham số có thể chỉ định dưới dạng biến môi trường tại clients: NLS_LIST_SEPARATORNLS_DISPLAYNLS_CREDITNLS_DEBITNLS_LANGNLS_MONETARY,NLS_CHAR.

21.2.4.  Chỉ định đặc trưng ngôn ngữ (Language-Dependent) cho từng session

Để thay đổi các đặc tính NLS cho một session ta sử dụng câu lệnh ALTER SESSION. Tất cả các biến môi trường có thể được khởi tạo ở cả phía client và server đều có thể thay đổi được thông qua câu lệnh ALTER SESSION .
Ví dụ: định dạng của date được thay đổi cho session.
ALTER SESSION SET
NLS_DATE_FORMAT=‘DD.MM.YYYY’;

Ta cũng có thể sử dụng công cụ SQL*Plus để thiết lập các biến môi trường thay cho câu lệnh ALTER SESSION. Có thể sử dụng package DBMS_SESSION.SET_NLS để khởi tạo các tham số NLS cho session.
Ví dụ:
DBMS_SESSION.SET_NLS(‘NLS_DATE_FORMAT’,’’’DD.MM.YYYY’’’);


21.2.5.  Tham số NLS và các hàm SQL

Sắp xếp nhị phân là phương thức săp xếp thường được sử dụng. Trong đó, các phần tử được sắp xếp theo các giá trị nhị phân trong bộ mã kí tự. Vị trí của các kí tự có thể thay đổi theo ngôn ngữ sử dụng.
Để loại bỏ giới hạn của sắp xếp nhị phân, Oracle cung cấp phương thức sắp xếp theo ngôn ngữ  bằng cách khởi tạo tham số NLS_SORT.
Ví dụ:
SQL> ALTER SESSION SET NLS_SORT=BINARY;
Session altered.

SQL> SELECT letter FROM letters ORDER BY letter;
LETTER
------
-a
b
c
z
6 rows selected.

Tham số NLS trong các hàm SQL
Oracle cung cấp một số hàm SQL sử dụng trên các tập kí tự single_byte và multibyte.
Các hàm SQL cho phép chỉ định các tham số NLS giống như một phần trong danh sách tham số của chúng. Các tham số này sẽ thay thế cho các giá trị NLS chỉ định bởi các biến môi trường.
Ví dụ: sử dụng tham số ngôn ngữ trong hàm SQL.
SVMRGRL> SELECT TO_CHAR(hiredate,'dd.mon.yyyy',
2> 'NLS_DATE_LANGUAGE=GERMAN')
3> FROM emp

TO_CHAR(HIR
-----------
17.dez.1980
20.feb.1981
22.feb.1981
02.apr.1981
28.sep.1981
01.mai.1981
09.jun.1981
19.apr.1987
17.nov.1981
08.sep.1981
23.mai.1987
03.dez.1981
03.dez.1981
23.jan.1982
14 rows selected.

SVRMGR> SELECT ename,
2> TO_CHAR(sal,'99G999D99','NLS_NUMERIC_CHARACTERS='',.''')
3> FROM emp;

ENAME                TO_CHAR(SA
-------                     ----------
SMITH                  800,00
ALLEN                 1.600,00
WARD                  1.250,00
JONES                  2.975,00
MARTIN              1.250,00
BLAKE                 2.850,00
CLARK                2.450,00
SCOTT                 3.000,00
KING                    5.000,00
TURNER              1.500,00
ADAMS                1.100,00
JAMES                 950,00
FORD                   3.000,00
MILLER               1.300,00
14 rows selected.

Các hàm SQL sau đây sử dụng tham số NLS
Tên hàm
Tham số NLS
TO_DATE
NLS_DATE_LANGUAGE
NLS_CALENDAR
TO_NUMBER
NLS_NUMERIC_CHARACTERS
NLS_CURRENCY
NLS_ISO_CURRENCY
TO_CHAR
NLS_DATE_LANGUAGE
NLS_NUMERIC_CHARACTERS
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_UPPER, NLS_LOWER,
NLS_INITCAP, NLSSORT

NLS_SORT

Một số giá trị được sử dụng giống như các mặt nạ (mask) định dạng trong các hàm như TO_CHARTO_DATE, và TO_NUMBER.
§  “D” cho dấu phân chấm thập phân
§  “G” dấu phân cách hàng nghìn
§  “L” cho biểu tượng tiền tệ
§  “C” cho biểu tượng tiền tệ theo chuẩn ISO

Mặt nạ định dạng cho ngày tháng:
§  “RM, rm” định dạng tháng theo kiểu roman
§  “IW”  dịnh dạng tuần theo chuẩn ISO
§  “IYYY, IYY, IY,” và “I” định dạng năm theo chuẩn ISO

21.3.THÔNG TIN VỀ CÁC GIÁ TRỊ NLS ĐƯỢC KHỞI TẠO

21.3.1.  Thông tin về tập ký tự sử dụng

Thông tin được lấy trong từ điển dữ liệu, bảng NLS_DATABASE_PARAMETERS
Sử dụng câu lệnh truy vấn sau đây để lấy thông tin về các giá trị NLS được khởi tạo
SVRMGR> SELECT parameter, value FROM nls_database_parameters
2> WHERE parameter LIKE '%CHARACTERSET%';
PARAMETER                                        VALUE
-----------------------                                   ------------------------------
NLS_CHARACTERSET                       WE8ISO8859P1
NLS_NCHAR_CHARACTERSET       US7ASCII
2 rows selected.

View này hiển thị giá trị các tham số được chỉ định bắt buộc trong tệp khởi tạo:
SVRMGR> SELECT * FROM nls_instance_parameters;

PARAMETER                                              VALUE
--------------------------                                     ------------------------------
NLS_LANGUAGE                                      AMERICAN
NLS_TERRITORY                                      AMERICA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
8 rows selected.

View sau đây hiển thị các thông tin về NLS khởi tạo cho session:
SVRMGR> SELECT * FROM nls_session_parameters;

PARAMETER                                          VALUE
------------------------ ------------------------------
NLS_LANGUAGE                                  AMERICAN
NLS_TERRITORY                                  AMERICA
NLS_CURRENCY                                  $
NLS_ISO_CURRENCY                          AMERICA
NLS_NUMERIC_CHARACTERS         .,
NLS_CALENDAR                                  GREGORIAN
NLS_DATE_FORMAT                           DD-MON-YY
NLS_DATE_LANGUAGE                     AMERICAN
NLS_SORT BINARY
9 rows selected.

21.3.2.  Thông tin về các thiết lập thông số NLS

Thông tin NLS được đặt trong các data dictionary views: NLS_INSTANCE_PARAMETERS và NLS_SESSION_PARAMETERS.

NLS_INSTANCE_PARAMETERS
§  Tham số  (tham số khởi tạo NLS được thiết lập một cách tường minh)
§  Giá trị
NLS_SESSION_PARAMETERS
§  Tham số  (Các tham số NLS của từng phiên)
§  Giá trị

Hiển thị các tham số NLS sử dụng trong parameter file tại server
SVRMGR> SELECT * FROM nls_instance_parameters;
PARAMETER                                     VALUE
--------------------------                           ------------------------------
NLS_LANGUAGE                             AMERICAN
NLS_TERRITORY                             AMERICA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
8 rows selected.

Hiển thị nội dung các tham số môi trường đang sử dụng trong session
SVRMGR> SELECT * FROM nls_session_parameters;
PARAMETER                                  VALUE
------------------------                          ------------------------------
NLS_LANGUAGE                          AMERICAN
NLS_TERRITORY                          AMERICA
NLS_CURRENCY                           $
NLS_ISO_CURRENCY                  AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR                           GREGORIAN
NLS_DATE_FORMAT                   DD-MON-YY
NLS_DATE_LANGUAGE             AMERICAN
NLS_SORT                                       BINARY
9 rows selected.

Sử dụng câu lệnh truy vấn sau đây lấy thông tin về các tham số khởi tạo hợp lệ:
SVRMGR> SELECT * FROM v$nls_valid_values
2> WHERE parameter='LANGUAGE';
PARAMETER          VALUE
---------                       --------------
LANGUAGE           AMERICAN
LANGUAGE           GERMAN
LANGUAGE           FRENCH
LANGUAGE           CANADIAN FRENCH
LANGUAGE           SPANISH
LANGUAGE           ITALIAN
LANGUAGE           DUTCH
LANGUAGE           SWEDISH
LANGUAGE           NORWEGIAN
LANGUAGE           DANISH
...

Hiển thị giá trị hiện thời của giá trị NLS khởi tạo
SVRMGR> SELECT * FROM v$nls_parameters;
PARAMETER                            VALUE
------------------                             ------------------
NLS_LANGUAGE                    AMERICAN
NLS_TERRITORY                    AMERICA
NLS_CURRENCY                    $
NLS_ISO_CURRENCY            AMERICA
NLS_NUMERIC_CHARAC     .,
NLS_CALENDAR                    GREGORIAN
NLS_DATE_FORMAT             DD-MON-YY
NLS_DATE_LANGUAGE       AMERICAN
NLS_CHARACTERSET           WE8ISO8859P1
NLS_SORT                                BINARY
10 rows selected.


@ Trần Văn Bình - Founder of Oracle DBA AZ
#học oracle #oracle database #khóa học oracle online #khóa học oca #học oca ở đâu #oca là gì #oca oracle #BossData #OraAz #OracleDBAAz #OracleTutorial #Quản_trị_cơ_sở_dữ_liệu_Oracle #OracleDBA #OracleDatabaseAdministration
@ Trần Văn Bình - Founder of Oracle DBA AZ #OracleTutorial #OracleDBA #OracleDatabaseAdministration #học oracle database #oca #ocp #oce

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master