Mengatur atau mengubah susunan database

Berlaku untuk: SQL Server Azure SQL Managed Instance

Artikel ini menjelaskan cara mengatur atau mengubah kolase database dengan menggunakan SQL Server Management Studio (SSMS) atau Transact-SQL. Jika tidak ada kolajeasi yang ditentukan, kolab server akan digunakan.

Pembatasan dan batasan

  • Kolase khusus Windows Unicode hanya dapat digunakan dengan klausa COLLATE untuk menerapkan kolase ke jenis data nchar, nvarchar, dan ntext pada tingkat kolom dan data tingkat ekspresi. Mereka tidak dapat digunakan dengan klausul COLLATE untuk mengubah kolase database atau instans server.

  • Jika kolase yang ditentukan atau kolase yang digunakan oleh objek yang dirujuk menggunakan halaman kode yang tidak didukung oleh Windows, Mesin Database menampilkan kesalahan.

  • Kolase tingkat server dalam Azure SQL Managed Instance dapat ditentukan ketika instans dibuat dan tidak dapat diubah nanti. Pelajari selengkapnya di Mengatur atau mengubah kolase server.

Penting

Pernyataan ALTER DATABASE COLLATE ini tidak didukung pada Azure SQL Database. Tentukan kolatasi database dan kolabasi katalog pada saat CREATE DATABASE.

Rekomendasi

Anda dapat menemukan nama kolamen yang didukung di Nama Kolamen Windows (Transact-SQL) dan Nama Kolaksi SQL Server (Transact-SQL); atau Anda dapat menggunakan fungsi sistem sys.fn_helpcollations (Transact-SQL).

Saat Anda mengubah kolacek database, Anda mengubah:

  • Kolom karakter, varchar, teks, nchar, nvarchar, atau ntext apa pun dalam tabel sistem diubah ke kolabasi baru.

  • Semua parameter karakter, varchar, teks, nchar, nvarchar, atau ntext yang ada dan nilai pengembalian skalar untuk prosedur tersimpan dan fungsi yang ditentukan pengguna diubah ke kolajeasi baru.

  • Jenis data sistem char, varchar, text, nchar, nvarchar, atau ntext , dan semua jenis data yang ditentukan pengguna berdasarkan jenis data sistem ini, diubah ke kolatasi default baru.

Anda dapat mengubah kolase objek baru apa pun yang dibuat dalam database pengguna dengan menggunakan COLLATE klausa pernyataan ALTER DATABASE . Pernyataan ini tidak mengubah kolabasi kolom dalam tabel yang ditentukan pengguna yang ada. Ini dapat diubah dengan menggunakan COLLATE klausul ALTER TABLE.

Penting

Mengubah kolase database atau kolom individual tidak mengubah data dasar yang sudah disimpan dalam tabel yang sudah ada. Kecuali aplikasi Anda secara eksplisit menangani konversi data dan perbandingan antara kolase yang berbeda, disarankan agar Anda melakukan transisi data yang ada dalam database ke kolase baru. Ini menghapus risiko bahwa aplikasi mungkin salah memodifikasi data, mengakibatkan kemungkinan hasil yang salah atau kehilangan data senyap.

Saat kolase database diubah, hanya tabel baru yang akan mewarisi kolase database baru secara default. Ada beberapa alternatif untuk mengonversi data yang ada ke kolase baru:

  • Mengonversi data di tempat. Untuk mengonversi kolase untuk kolom dalam tabel yang sudah ada, lihat Mengatur atau Mengubah Kolase Kolom. Operasi ini mudah diterapkan, tetapi mungkin menjadi masalah pemblokiran untuk tabel besar dan aplikasi yang sibuk. Lihat contoh berikut untuk konversi MyString kolom di tempat ke kolate baru:

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • Salin data ke tabel baru yang menggunakan kolabasi baru, dan ganti tabel asli dalam database yang sama. Buat tabel baru di database saat ini yang akan mewarisi kolase database, menyalin data antara tabel lama dan tabel baru, menghilangkan tabel asli, dan mengganti nama tabel baru menjadi nama tabel asli. Ini adalah operasi yang lebih cepat daripada konversi di tempat, tetapi mungkin menjadi tantangan saat menangani skema kompleks dengan dependensi seperti batasan Kunci Asing, batasan Kunci Primer, dan Pemicu. Ini juga akan memerlukan sinkronisasi data akhir antara tabel asli dan baru sebelum pemotongan akhir, jika data terus diubah oleh aplikasi. Lihat contoh berikut untuk konversi MyString "salin dan ganti" kolom ke kolab baru:

    CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); 
    
    INSERT INTO dbo.MyTable2 
    SELECT * FROM dbo.MyTable; 
    
    DROP TABLE dbo.MyTable; 
    
    EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
    
  • Salin data ke database baru yang menggunakan kolabasi baru, dan ganti database asli. Buat database baru menggunakan kolajeasi baru, dan transfer data dari database asli melalui alat seperti Layanan Integrasi atau Wizard Impor/Ekspor di SQL Server Management Studio. Ini adalah pendekatan yang lebih sederhana untuk skema yang kompleks. Ini juga akan memerlukan sinkronisasi data akhir antara database asli dan baru sebelum pemotongan akhir, jika data terus diubah oleh aplikasi.

Izin

Untuk membuat database baru, memerlukan CREATE DATABASE izin dalam master database, atau memerlukan CREATE ANY DATABASEizin , atau ALTER ANY DATABASE .

Untuk mengubah susunan database yang sudah ada, memerlukan ALTER izin pada database.

Mengatur atau mengubah kolase database menggunakan SQL Server Management Directory

  1. Di Object Explorer, sambungkan ke instans mesin database SQL Server, perluas instans tersebut, lalu perluas Database.

  2. Jika Anda membuat database baru, klik kanan Database lalu pilih Database Baru. Jika Anda tidak ingin kolamen default, pilih halaman Opsi , dan pilih kolajeasi dari daftar drop-down Kolabasi .

    Atau, jika database sudah ada, klik kanan database yang Anda inginkan dan pilih Properti. Pilih halaman Opsi , dan pilih kolajeasi dari daftar drop-down Kolabasi .

  3. Setelah selesai, pilih OK.

Mengatur kolase database menggunakan Transact-SQL

  1. Sambungkan ke Mesin Database.

  2. Dari bilah Standar, pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Contoh ini memperlihatkan cara menggunakan klausa COLLATE di CREATE DATABASE untuk menentukan nama kolabasi. Contoh membuat database MyOptionsTest yang menggunakan Latin1_General_100_CS_AS_SC kolabasi. Setelah Anda membuat database, jalankan SELECT pernyataan untuk memverifikasi pengaturan.

USE master;  
GO

IF DB_ID (N'MyOptionsTest') IS NOT NULL  
    DROP DATABASE MyOptionsTest;  
GO

CREATE DATABASE MyOptionsTest  
    COLLATE Latin1_General_100_CS_AS_SC;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

Mengubah kolater database menggunakan Transact-SQL

  1. Sambungkan ke Mesin Database.

  2. Dari bilah Standar, pilih Kueri Baru.

  3. Salin dan tempel contoh berikut ke dalam jendela kueri dan pilih Jalankan. Contoh ini memperlihatkan cara menggunakan klausa COLLATE dalam pernyataan ALTER DATABASE untuk mengubah nama kolase. Jalankan SELECT pernyataan untuk memverifikasi perubahan.

USE master;  
GO

ALTER DATABASE MyOptionsTest  
    COLLATE French_CI_AS ;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

Langkah berikutnya

Pelajari selengkapnya tentang kolabasi: