Bagikan melalui


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 kolatasi yang ditentukan, kolatasi server akan digunakan.

Pembatasan dan batasan

  • Kolase khusus Windows Unicode hanya dapat digunakan dengan klausul 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 kolatasi yang ditentukan atau kolasasi yang digunakan oleh objek yang dirujuk menggunakan halaman kode yang tidak didukung oleh Windows, Mesin Database menampilkan kesalahan.

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

Penting

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

Rekomendasi

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

Saat Anda mengubah kolatasi database, Anda mengubah:

  • Kolom karakter, varchar, teks, nchar, nvarchar, atau ntext apa pun dalam tabel sistem diubah ke kolase 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 kolase baru.

  • Jenis data char, varchar, text, nchar, nvarchar, atau ntext system, dan semua jenis data yang ditentukan pengguna berdasarkan jenis data sistem ini, diubah ke kolase 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 kolaterasi 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 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 kolom di MyString 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 kolatasi baru, dan ganti tabel asli dalam database yang sama. Buat tabel baru dalam 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 "salin dan ganti" kolom ke MyString kolate 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 kolatasi baru, dan ganti database asli. Buat database baru menggunakan kolase baru, dan transfer data dari database asli melalui alat seperti Integration Services atau Wizard Impor/Ekspor di SQL Server Management Studio. Ini adalah pendekatan yang lebih sederhana untuk skema 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 kolatasi 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 menginginkan kolamen default, pilih halaman Opsi , dan pilih kolamen dari daftar drop-down Kolabasi .

    Atau, jika database sudah ada, klik kanan database yang Anda inginkan dan pilih Properti. Pilih halaman Opsi , dan pilih kolamen 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 kolab. Contoh membuat database MyOptionsTest yang menggunakan Latin1_General_100_CS_AS_SC kolajeksi. 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 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 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 kolate: