Saat Anda mengembangkan aplikasi atau menulis kode dalam sistem database SQL, sangat penting untuk memahami bagaimana data akan diurutkan dan dibandingkan. Anda dapat menyimpan data Anda dalam bahasa tertentu, atau Anda mungkin ingin SQL Server memperlakukan data peka huruf besar-kecil dan tidak peka huruf besar-kecil secara terpisah. Microsoft telah menyediakan pengaturan SQL Server yang disebut Collation untuk mengontrol dan mengatasi persyaratan tersebut.
Apa itu Collation di SQL Server?
Kita dapat mengatur susunan di berbagai level di SQL Server seperti yang diberikan di bawah ini.
- Tingkat Server
- Tingkat Basis Data
- Tingkat Kolom
- Tingkat Ekspresi
Pengumpulan tingkat Server terkadang dapat disebut Pengumpulan tingkat Instance SQL Server .
Susunan tingkat Basis data akan diwarisi dari pengaturan susunan tingkat server jika Anda tidak memilih susunan tertentu selama pembuatan basis data. Anda juga dapat mengubah susunan tingkat basis data nanti. Perhatikan bahwa mengubah susunan basis data hanya akan diterapkan untuk objek yang akan datang atau objek baru yang akan dibuat setelah susunan diubah.
Pemeriksaan baru tidak akan mengubah data yang sudah ada yang disimpan dalam tabel yang diurutkan dengan jenis pemeriksaan terakhir. Tim aplikasi memerlukan perencanaan lebih lanjut untuk menangani konversi data yang tersimpan ini karena setelan susunan yang baru.
Ada beberapa cara untuk melakukannya. Salah satunya adalah menyalin data dari tabel yang ada ke tabel baru yang dibuat dengan susunan baru dan kemudian mengganti tabel lama dengan yang baru. Anda juga dapat memindahkan data tabel ke database baru dengan membuat susunan baru, dan mengganti database lama dengan yang baru.
CATATAN :Mengubah susunan adalah tugas yang rumit dan Anda harus menghindarinya kecuali jika Anda memiliki kasus bisnis wajib.
Bagaimana Menemukan dan Mengubah Pengumpulan Basis Data di SQL Server?
Mari kita lanjutkan dan periksa susunan SQL Server Instance dan semua database yang dihosting pada instance itu. Anda dapat memeriksa susunan dengan mengakses properti database atau tingkat instance menggunakan SQL Server Management Studio atau hanya dengan menjalankan pernyataan T-SQL di bawah ini. Collation untuk setiap database disimpan dalam objek sistem sys.databases – kami akan mengaksesnya untuk mendapatkan informasi ini.
--Check Database Collation
SELECT name, collation_name
FROM sys.databases
GO
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]
Saya telah mengeksekusi pernyataan T-SQL di atas dan mendapatkan output di bawah ini. Kita dapat melihat bahwa semua database dan susunan tingkat server memiliki pengaturan yang sama dengan SQL_Latin1_General_CP1_CI_AS . Ini berarti susunan basis data telah diwarisi oleh susunan tingkat server saat membuatnya, dan nilai defaultnya tidak diubah.
Sekarang, izinkan saya menunjukkan cara memeriksa susunan basis data menggunakan GUI di SQL Server Management Studio.
Pertama, sambungkan ke instans SQL Server Anda menggunakan SQL Server Management Studio. Perluas node instance diikuti dengan Databases map. Klik kanan database target dan pilih Properties :
Anda akan mendapatkan Properti Database di bawah ini jendela.
Sekarang klik Opsi tab dari panel sisi kiri. Anda akan mendapatkan beberapa pengaturan properti di panel sisi kanan. Koleksi adalah properti pertama dari halaman ini – Anda dapat melihat bahwa itu sama seperti pada skrip T-SQL di atas.
Demikian pula, Anda dapat mengklik node instance SQL Server dan mengklik kanan properties tingkat instance untuk melihat susunan tingkat server.
Jika Anda ingin mengubah susunan ini menjadi susunan baru, Anda hanya perlu mengklik Kolasi dropdown dan pilih opsi yang Anda butuhkan. Pastikan Anda telah melakukan backup penuh terhadap database Anda sebelum melakukannya.
Saya telah memilih susunan serupa dengan SQL_Latin1_General_CP1_CS peka huruf besar-kecil _AS untuk database ini dan klik OK untuk menerapkannya. Catatan:Pastikan tidak ada yang terhubung ke database target selama prosedur ini, jika tidak, Anda harus mengubah mode menjadi satu pengguna dan ubah konfigurasi ini.
Anda juga dapat mengubah susunan database ini menggunakan pernyataan T-SQL. Untuk itu, gunakan COLLATE klausa pernyataan ALTER DATABASE.
Pertama, kami telah mengalihkan database ke pengguna tunggal mode, lalu ubah susunannya, dan, terakhir, pindahkan database ke multi-pengguna modus.
--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
Mencantumkan Semua Kumpulan yang Didukung di SQL Server
Bagian ini akan menunjukkan kepada Anda bagaimana menemukan semua susunan yang tersedia di SQL Server. Pertama, izinkan saya menunjukkan cara mendapatkan daftar semua susunan yang didukung untuk instance SQL Server.
SQL Server memiliki fungsi sistem yang disebut fn_helpcollations() yang dapat Anda gunakan untuk mengambil semua koleksi.
Jalankan perintah di bawah ini untuk menampilkan daftar.
--Display the list of all collations
SELECT name, description FROM fn_helpcollations()
Kita dapat melihat semua 5508 koleksi yang didukung di bagian output. Jika Anda tidak yakin susunan mana yang harus dipilih, Anda dapat menggunakan klausa WHERE dalam skrip di bawah ini untuk memfilter semua kemungkinan susunan yang dapat disetel ke database.
Katakanlah Anda perlu menyimpan data Anda dalam bahasa Inggris AS dan ingin SQL Server menanganinya dalam format peka huruf besar/kecil. Anda dapat menggunakan perintah di bawah ini untuk mengambil daftar kemungkinan dan susunan yang didukung untuk kueri Anda:
--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%’
Outputnya hanya menampilkan 10 koleksi yang memenuhi permintaan Anda. Anda dapat menggunakan skrip di atas untuk memfilter berbagai susunan.
Dampak Mengubah Susunan Basis Data pada Output Kueri
Di bagian ini, saya akan menunjukkan kepada Anda perbedaan antara dua keluaran dari kueri yang sama ketika dijalankan dengan susunan yang berbeda.
Pertama, saya akan membuat database dengan nama MSSQL dengan susunan (SQL_Latin1_General_CP1_CS _AS ). Kemudian saya akan menjalankan kueri yang sama dua kali untuk mendapatkan output. Nanti saya ubah susunannya menjadi SQL_Latin1_General_CP1_CI _AS dan jalankan lagi kueri yang sama untuk mendapatkan hasilnya. Anda dapat membandingkan kedua output dan memahami dampak dari mengubah susunan database. Jadi, mari kita mulai dengan pembuatan database.
Luncurkan jendela pembuatan database baru seperti yang ditunjukkan pada gambar di bawah ini. Anda juga dapat membuat database ini menggunakan T-SQL. Setelah itu, Anda dapat melihat nama database dan file datanya. Sekarang, klik tab kedua di panel sebelah kiri untuk beralih ke jendela properti collation.
Anda dapat melihat bahwa nama pemeriksaan untuk database ini adalah default . Artinya database ini akan mewarisi susunan dari jenis susunan tingkat server. Klik Kolasi dropdown untuk memilih susunan baru Anda.
Saya telah memilih susunan di bawah SQL_Latin1_General_CP1_CS _AS untuk database ini – bukan yang default. Klik Oke untuk melanjutkan pembuatan database.
Sekarang, periksa susunan database untuk database yang baru dibuat. Kita bisa melihatnya SQL_Latin1_General_CP1_CS _AS seperti yang telah kita pilih pada langkah sebelumnya.
Dalam SQL_Latin1_General_CP1_CS _AS , CS singkatan dari peka huruf besar/kecil mode, dan CI singkatan dari tidak peka huruf besar/kecil mode. Sekarang Anda dapat menjalankan kode T-SQL di bawah ini atau kode apa pun untuk mendapatkan output.
Saya telah menjalankan perintah yang sama dua kali. Skrip pertama memfilter nama kolom dengan nilai SYS di ibukota huruf, sedangkan skrip kedua akan menyaring kolom yang sama dengan nilai yang sama sys dalam kecil surat. Bagian keluaran menunjukkan bahwa skrip pertama tidak menampilkan keluaran apa pun, sedangkan skrip kedua menampilkan keluaran karena perilakunya yang peka huruf besar/kecil.
Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO
Sekarang, kita akan mengubah susunan database ini menjadi pemeriksaan case-insensitive SQL_Latin1_General_CP1_CI _AS dengan mengeksekusi pernyataan T-SQL di bawah ini. Anda juga dapat mengubahnya melalui GUI dengan mengakses jendela Database Properties di 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
Saya telah mengeksekusi skrip di atas dalam satu kesempatan, dan susunan basis data berhasil diubah menjadi susunan baru yang memiliki dukungan peka huruf besar/kecil.
Anda dapat memverifikasi perubahan ini dengan menjalankan skrip di bawah ini untuk memeriksa susunan MSSQL database yang baru dibuat. Kita dapat melihat bahwa susunan baru diatur untuk database ini pada gambar di bawah ini.
Kami akan kembali menjalankan pernyataan T-SQL yang sama sebelum mengubah susunan untuk melihat dampak dari perubahan ini. Seperti yang bisa kita lihat sekarang, kedua pernyataan T-SQL ada di output.
Kesimpulan
Saya harap jelas bahwa pemeriksaan di SQL Server sangat penting. Kami telah menentukan dampak apa yang ditimbulkannya jika Anda membuat perubahan dalam susunan di tingkat mana pun di SQL Server. Selalu lakukan perencanaan yang tepat dan uji modifikasi di lingkungan siklus hidup Anda yang lebih rendah terlebih dahulu.
Nantikan artikel saya berikutnya, di mana saya akan menunjukkan metode langkah demi langkah untuk mengubah susunan tingkat server.
Silakan bagikan artikel ini dan berikan umpan balik Anda, ini membantu kami menjadi lebih baik.