Câu trả lời đơn giản là, không giống như MySQL, không thể xác định bộ ký tự tại cấp cột (hoặc bảng)
. Latin1
cũng không phải là một bộ ký tự Oracle hợp lệ.
Các bộ ký tự nhất quán trên cơ sở dữ liệu và sẽ được chỉ định khi bạn tạo cơ sở dữ liệu. Bạn có thể tìm thấy nhân vật của mình bằng cách truy vấn NLS_DATABASE_PARAMETERS
,
select value
from nls_database_parameters
where parameter = 'NLS_CHARACTERSET'
Danh sách đầy đủ các bộ ký tự khả dụng có sẵn cho 11g r2
và cho 9i
hoặc bạn có thể truy vấn V $ NLS_VALID_VALUES
.
Có thể sử dụng ALTER SESSION
tuyên bố
để đặt NLS_LANGUAGE
hoặc NLS_TERRITORY
, nhưng tiếc là bạn không thể làm điều này cho bộ ký tự. Tôi tin rằng điều này là do việc thay đổi ngôn ngữ sẽ thay đổi cách Oracle hiển thị dữ liệu được lưu trữ trong khi việc thay đổi bộ ký tự sẽ thay đổi cách Oracle lưu trữ dữ liệu.
Khi hiển thị dữ liệu, tất nhiên bạn có thể chỉ định bộ ký tự bắt buộc trong bất kỳ ứng dụng khách nào bạn đang sử dụng.
Di chuyển bộ ký tự không phải là một nhiệm vụ tầm thường và không nên được thực hiện nhẹ nhàng.
Một lưu ý nhỏ là tại sao bạn lại cố gắng sử dụng Latin 1? Sẽ bình thường hơn nếu thiết lập một cơ sở dữ liệu mới trong một cái gì đó như UTF-8 (còn được gọi là AL32UTF8
- không sử dụng UTF8
) hoặc UTF-16 để bạn có thể lưu trữ dữ liệu nhiều byte một cách hiệu quả. Ngay cả khi bạn không cần nó bây giờ, bạn nên cố gắng - không có gì đảm bảo trong cuộc sống - để chứng minh cơ sở dữ liệu của bạn trong tương lai mà không cần phải di chuyển trong tương lai.
Nếu bạn đang tìm cách chỉ định các bộ ký tự khác nhau cho các cột khác nhau trong cơ sở dữ liệu thì tùy chọn tốt hơn sẽ là xác định xem yêu cầu này có thực sự cần thiết hay không và cố gắng loại bỏ nó. Nếu điều đó chắc chắn là cần thiết thì cách tốt nhất của bạn có thể là sử dụng một bộ ký tự là bộ siêu của tất cả các bộ ký tự tiềm năng. Sau đó, có một số loại ràng buộc kiểm tra giới hạn cột ở các giá trị hex cụ thể. Tôi không khuyên bạn nên làm điều này chút nào, khả năng mắc sai lầm là rất lớn và nó cực kỳ phức tạp. Hơn nữa, các bộ ký tự khác nhau hiển thị các giá trị hex khác nhau theo cách khác nhau. Ngược lại, điều này có nghĩa là bạn cần phải thực thi để một cột được hiển thị bằng một ký tự cụ thể, điều này là không thể vì nó nằm ngoài phạm vi của cơ sở dữ liệu.