Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Hiểu đối chiếu cấp độ cơ sở dữ liệu và tác động của việc thay đổi nó cho một cơ sở dữ liệu

Khi bạn phát triển một ứng dụng hoặc viết mã trong hệ thống cơ sở dữ liệu SQL, điều quan trọng là phải hiểu dữ liệu sẽ được sắp xếp và so sánh như thế nào. Bạn có thể lưu trữ dữ liệu của mình bằng một ngôn ngữ cụ thể hoặc bạn có thể muốn SQL Server xử lý dữ liệu phân biệt chữ hoa chữ thường và không phân biệt chữ hoa chữ thường một cách riêng biệt. Microsoft đã cung cấp cài đặt SQL Server được gọi là Collation để kiểm soát và giải quyết các yêu cầu đó.

Collation trong SQL Server là gì?

Chúng ta có thể đặt đối chiếu ở các cấp khác nhau trong SQL Server như được cung cấp bên dưới.

  • Cấp máy chủ
  • Cấp độ cơ sở dữ liệu
  • Mức cột
  • Mức độ biểu đạt

Đối chiếu cấp Máy chủ đôi khi có thể được gọi là Đối chiếu cấp Phiên bản SQL Server .

Đối chiếu cấp Cơ sở dữ liệu sẽ được kế thừa từ cài đặt đối chiếu cấp máy chủ nếu bạn không chọn bất kỳ đối chiếu cụ thể nào trong quá trình tạo cơ sở dữ liệu. Bạn cũng có thể thay đổi đối chiếu cấp cơ sở dữ liệu sau này. Lưu ý rằng việc thay đổi đối chiếu cơ sở dữ liệu sẽ chỉ được áp dụng cho các đối tượng sắp tới hoặc mới sẽ được tạo sau khi thay đổi đối chiếu.

Đối chiếu mới sẽ không sửa đổi dữ liệu hiện có được lưu trữ trong các bảng đã được sắp xếp với loại đối chiếu cuối cùng. Nhóm ứng dụng cần lập kế hoạch thêm để xử lý việc chuyển đổi dữ liệu được lưu trữ này do cài đặt đối chiếu mới.

Có một số cách để làm điều đó. Một là sao chép dữ liệu từ bảng hiện có sang một bảng mới được tạo với đối chiếu mới và sau đó thay thế bảng cũ bằng bảng mới. Bạn cũng có thể di chuyển dữ liệu bảng của mình sang cơ sở dữ liệu mới bằng cách đối chiếu mới và thay thế cơ sở dữ liệu cũ bằng cơ sở dữ liệu mới.

LƯU Ý :Thay đổi đối chiếu là một nhiệm vụ phức tạp và bạn nên tránh nó trừ khi bạn có một trường hợp kinh doanh bắt buộc.

Cách tìm và thay đổi đối chiếu cơ sở dữ liệu trong SQL Server?

Hãy tiếp tục và kiểm tra sự đối chiếu của Phiên bản SQL Server và tất cả cơ sở dữ liệu được lưu trữ trên phiên bản đó. Bạn có thể kiểm tra đối chiếu bằng cách truy cập cơ sở dữ liệu hoặc cơ sở dữ liệu hoặc các thuộc tính cấp phiên bản cửa sổ sử dụng SQL Server Management Studio hoặc đơn giản bằng cách thực hiện câu lệnh T-SQL bên dưới. Đối chiếu cho mỗi cơ sở dữ liệu được lưu trữ trong đối tượng hệ thống sys.databases - chúng tôi sẽ truy cập nó để lấy thông tin này.

--Check Database Collation
SELECT name, collation_name  
FROM sys.databases  
GO  
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]

Tôi đã thực hiện câu lệnh T-SQL ở trên và nhận được kết quả bên dưới. Chúng tôi có thể thấy rằng tất cả cơ sở dữ liệu và đối chiếu cấp máy chủ có cùng cài đặt như SQL_Latin1_General_CP1_CI_AS . Điều đó có nghĩa là đối chiếu cơ sở dữ liệu đã được kế thừa bởi đối chiếu cấp máy chủ trong khi tạo chúng và giá trị mặc định không bị thay đổi.

Bây giờ, hãy để tôi chỉ cho bạn cách kiểm tra đối chiếu cơ sở dữ liệu bằng GUI trong SQL Server Management Studio.

Đầu tiên, kết nối với phiên bản SQL Server của bạn bằng cách sử dụng SQL Server Management Studio. Mở rộng nút phiên bản theo sau là Cơ sở dữ liệu thư mục. Nhấp chuột phải vào cơ sở dữ liệu mục tiêu và chọn Thuộc tính :

Bạn sẽ nhận được Thuộc tính cơ sở dữ liệu bên dưới cửa sổ.

Bây giờ hãy nhấp vào Tùy chọn từ bảng điều khiển bên trái. Bạn sẽ nhận được nhiều cài đặt thuộc tính trong bảng điều khiển bên phải. Đối chiếu là thuộc tính đầu tiên của trang này - bạn có thể thấy rằng nó giống như trong tập lệnh T-SQL ở trên.

Tương tự, bạn có thể nhấp vào nút phiên bản SQL Server và nhấp chuột phải vào thuộc tính cấp phiên bản để xem đối chiếu cấp máy chủ.

Nếu bạn muốn thay đổi ảnh ghép này thành ảnh ghép mới, bạn chỉ cần nhấp vào Ảnh ghép thả xuống và chọn tùy chọn bạn cần. Đảm bảo rằng bạn đã sao lưu đầy đủ cơ sở dữ liệu của mình trước khi thực hiện.

Tôi đã chọn một đối chiếu tương tự với SQL_Latin1_General_CP1_ CS phân biệt chữ hoa chữ thường _AS cho cơ sở dữ liệu này và nhấp vào OK để áp dụng nó. Lưu ý:Đảm bảo rằng không có ai được kết nối với cơ sở dữ liệu đích trong quá trình này, nếu không, bạn sẽ cần chuyển chế độ thành một người dùng duy nhất và thay đổi cấu hình này.

Bạn cũng có thể thay đổi đối chiếu cơ sở dữ liệu này bằng cách sử dụng câu lệnh T-SQL. Đối với điều đó, hãy sử dụng COLLATE mệnh đề của câu lệnh ALTER DATABASE.

Đầu tiên, chúng tôi đã chuyển cơ sở dữ liệu thành một người dùng , sau đó thay đổi đối chiếu và cuối cùng, chuyển cơ sở dữ liệu sang nhiều người dùng chế độ.

--Change Database Collation using T-SQL  
USE master;  
GO  
Alter DATABASE [AdventureWorks2019] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [AdventureWorks2019]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [AdventureWorks2019] SET MULTI_USER

Liệt kê tất cả các cụm từ được hỗ trợ trong SQL Server

Phần này sẽ chỉ cho bạn cách tìm tất cả các đối chiếu có sẵn trong SQL Server. Trước tiên, hãy để tôi chỉ cho bạn cách lấy danh sách tất cả các đối chiếu được hỗ trợ cho phiên bản SQL Server.

SQL Server có một chức năng hệ thống được gọi là fn_helpcollations () mà bạn có thể sử dụng để tìm nạp tất cả các ảnh ghép.

Chạy lệnh dưới đây để hiển thị danh sách.

--Display the list of all collations  
SELECT name, description FROM fn_helpcollations()

Chúng ta có thể xem tất cả 5508 ảnh ghép được hỗ trợ trong phần đầu ra. Nếu bạn không chắc chắn nên chọn đối chiếu nào, bạn có thể sử dụng mệnh đề WHERE trong đoạn mã bên dưới để lọc ra tất cả các đối chiếu có thể được đặt vào cơ sở dữ liệu.

Giả sử bạn cần lưu trữ dữ liệu của mình bằng ngôn ngữ tiếng Anh Mỹ và muốn SQL Server xử lý dữ liệu đó ở định dạng phân biệt chữ hoa chữ thường. Bạn có thể sử dụng lệnh dưới đây để tìm nạp danh sách các đối chiếu có thể và được hỗ trợ cho truy vấn của mình:

--Display the list of all collations with WHERE clause 
SELECT Name, Description FROM fn_helpcollations()  
WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%’

Kết quả đầu ra chỉ hiển thị 10 đối chiếu đáp ứng truy vấn của bạn. Bạn có thể sử dụng tập lệnh trên để lọc ra các ảnh ghép khác nhau.

Tác động của việc thay đổi đối chiếu cơ sở dữ liệu đối với đầu ra truy vấn

Trong phần này, tôi sẽ chỉ cho bạn sự khác biệt giữa hai kết quả đầu ra của cùng một truy vấn khi chúng được thực thi với các đối chiếu khác nhau.

Đầu tiên, tôi sẽ tạo một cơ sở dữ liệu có tên MSSQL với một đối chiếu ( SQL_Latin1_General_CP1_ CS _AS ). Sau đó, tôi sẽ chạy cùng một truy vấn hai lần để lấy kết quả. Sau đó, tôi sẽ thay đổi đối chiếu thành SQL_Latin1_General_CP1_ CI _AS và một lần nữa chạy các truy vấn tương tự để lấy đầu ra của chúng. Bạn có thể so sánh cả hai kết quả đầu ra và hiểu tác động của việc thay đổi đối chiếu cơ sở dữ liệu. Vì vậy, hãy bắt đầu với việc tạo cơ sở dữ liệu.

Khởi chạy cửa sổ tạo cơ sở dữ liệu mới như trong hình bên dưới. Bạn cũng có thể tạo cơ sở dữ liệu này bằng T-SQL. Sau đó, bạn có thể thấy tên cơ sở dữ liệu và các tệp dữ liệu của nó. Bây giờ, hãy nhấp vào tab thứ hai trên bảng điều khiển bên trái để chuyển sang cửa sổ thuộc tính đối chiếu.

Bạn có thể thấy rằng tên đối chiếu cho cơ sở dữ liệu này là mặc định . Nó có nghĩa là cơ sở dữ liệu này sẽ kế thừa đối chiếu từ loại đối chiếu cấp máy chủ. Nhấp vào Đối chiếu thả xuống để chọn đối chiếu mới của bạn.

Tôi đã chọn đối chiếu dưới đây SQL_Latin1_General_CP1_ CS _AS cho cơ sở dữ liệu này - không phải là cơ sở dữ liệu mặc định. Nhấp vào OK để tiếp tục tạo cơ sở dữ liệu.

Bây giờ, hãy kiểm tra đối chiếu cơ sở dữ liệu cho một cơ sở dữ liệu mới được tạo. Chúng ta có thể thấy đó là SQL_Latin1_General_CP1_ CS _AS như chúng ta đã chọn ở bước trước.

Trong SQL_Latin1_General_CP1_ CS _AS , CS là viết tắt của phân biệt chữ hoa chữ thường CI là viết tắt của không phân biệt chữ hoa chữ thường cách thức. Bây giờ, bạn có thể chạy mã T-SQL bên dưới hoặc bất kỳ mã nào để lấy kết quả.

Tôi đã thực hiện cùng một lệnh hai lần. Tập lệnh đầu tiên lọc tên cột bằng giá trị SYS thủ đô chữ cái, trong khi tập lệnh thứ hai sẽ lọc cùng một cột có cùng giá trị sys trong nhỏ bức thư. Phần đầu ra chứng tỏ rằng tập lệnh đầu tiên không hiển thị bất kỳ đầu ra nào, trong khi tập lệnh thứ hai đã hiển thị đầu ra do hành vi phân biệt chữ hoa chữ thường của nó.

Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO

Bây giờ, chúng tôi sẽ thay đổi đối chiếu của cơ sở dữ liệu này thành đối chiếu không phân biệt chữ hoa chữ thường SQL_Latin1_General_CP1_ CI _AS bằng cách thực hiện các câu lệnh T-SQL dưới đây. Bạn cũng có thể thay đổi nó qua GUI bằng cách truy cập cửa sổ Thuộc tính cơ sở dữ liệu trong SQL Server Management Studio.

--Change database collation to SQL_Latin1_General_CP1_CI_AS
USE master;  
GO  
Alter DATABASE [MSSQL] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [MSSQL]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [MSSQL] SET MULTI_USER

Tôi đã thực thi tập lệnh trên trong một lần và đối chiếu cơ sở dữ liệu đã được thay đổi thành công thành đối chiếu mới có hỗ trợ phân biệt chữ hoa chữ thường.

Bạn có thể xác minh sự thay đổi này bằng cách chạy các tập lệnh dưới đây để kiểm tra sự đối chiếu của cơ sở dữ liệu mới được tạo MSSQL. Chúng ta có thể thấy rằng đối chiếu mới được thiết lập cho cơ sở dữ liệu này trong hình ảnh bên dưới.

Chúng tôi sẽ chạy lại cùng một câu lệnh T-SQL trước khi thay đổi đối chiếu để xem tác động của thay đổi này. Như chúng ta có thể thấy bây giờ, cả hai câu lệnh T-SQL đều có trong đầu ra.

Kết luận

Tôi hy vọng rõ ràng rằng việc đối chiếu trong SQL Server là rất quan trọng. Chúng tôi đã xác định tác động mà nó để lại nếu bạn thực hiện các thay đổi trong đối chiếu ở bất kỳ cấp nào trong SQL Server. Luôn lập kế hoạch phù hợp và thử nghiệm các sửa đổi trong môi trường vòng đời thấp hơn của bạn trước.

Hãy theo dõi bài viết tiếp theo của tôi, nơi tôi sẽ chỉ cho bạn phương pháp từng bước để thay đổi đối chiếu cấp máy chủ.

Hãy chia sẻ bài viết này và đưa ra phản hồi của bạn, nó sẽ giúp chúng tôi cải thiện.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia vòng lặp lồng nhau và Spools hiệu suất

  2. Các nhóm Facebook hàng đầu về Phân tích, Dữ liệu lớn, Khai thác dữ liệu, Hadoop, NoSQL, Khoa học dữ liệu

  3. Phân tích dữ liệu lớn với công cụ Microsoft Azure

  4. So sánh các lớp trừu tượng cơ sở dữ liệu PHP và các plugin CRUD

  5. Tạo một cụm Docker Swarm trên Dịch vụ vùng chứa Azure