Aracılığıyla paylaş


Veritabanı harmanlamasını ayarlama veya değiştirme

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

Bu makalede, SQL Server Management Studio (SSMS) veya Transact-SQL kullanarak veritabanı harmanlama nasıl ayarlanacağı veya değiştireceği açıklanır.

Veritabanı harmanlaması belirtilmezse, sunucu harmanlama kullanılır.

Öneri

Desteklenen harmanlama adlarını Windows Harmanlama Adı ve SQL Server Harmanlama Adıbulabilirsiniz; veya sys.fn_helpcollations sistem işlevini kullanabilirsiniz.

Veritabanı harmanlamasını değiştirdiğinizde şunları değiştirirsiniz:

  • Sistem tablolarındaki karakter, varchar, metin, nchar, nvarcharveya ntext sütunlarının harmanlaması yeni harmanlama ile değiştirilir.

  • Var olan tüm char, varchar, metin, nchar, nvarcharveya ntext parametreleri ve saklı yordamlar ve kullanıcı tanımlı işlevler için skaler dönüş değerleri yeni harmanlama olarak değiştirilir.

  • char, varchar, metin, nchar, nvarcharveya ntext sistem veri türleri ve bu sistem veri türlerini temel alan tüm kullanıcı tanımlı veri türleri yeni varsayılan harmanlama olarak değiştirilir.

ALTER DATABASE deyiminin COLLATE yan tümcesini kullanarak kullanıcı veritabanında oluşturulan tüm yeni nesnelerin harmanlamasını değiştirebilirsiniz. Bu ifade , mevcut kullanıcı tanımlı tablolardaki sütunların harmanlamasını değiştirmez. Bunlar, ALTER TABLECOLLATE yan tümcesi kullanılarak değiştirilebilir.

İzinler

Yeni bir veritabanı oluşturmak için, master veritabanında veya CREATE ANY DATABASEveya ALTER ANY DATABASE izinlerinde CREATE DATABASE iznine ihtiyacınız vardır.

Var olan bir veritabanının harmanlamasını değiştirmek için veritabanında ALTER iznine sahip olmanız gerekir.

Veritabanı harmanlamasını ayarlama veya değiştirme

SQL Server Management Studio (SSMS) veya Transact-SQL (T-SQL) kullanarak veritabanı harmanlamasını ayarlayabilir veya değiştirebilirsiniz.

SQL Server Management Studio (SSMS) kullanarak yeni bir veritabanı için harmanlamayı belirtebilir veya mevcut bir veritabanı için harmanlamayı güncelleştirebilirsiniz.

SQL Server Management Studio'da, Nesne Gezgini'ni açın, SQL Server Veritabanı Altyapısı örneğine bağlanın, bu örneği genişletin ve ardından veritabanlarıgenişletin:

  • Yeni bir veritabanıiçin: Veritabanları'na sağ tıklayın ve ardından Yeni Veritabanıseçin. Varsayılan harmanlamayı istemiyorsanız, Seçenekleri sayfasını seçin ve Harmanlama açılan listesinden bir harmanlama seçin.
  • Var olan bir veritabanıiçin: İstediğiniz veritabanına sağ tıklayın ve özellikler seçin. Seçenekleri sayfasını seçin ve Harmanlama açılan listesinden bir harmanlama seçin.

Harmanlamayı değiştirdikten sonra veriler

Önemli

bir veritabanının veya tek tek sütunların harmanlamasını değiştirmek, var olan tablolarda depolanan temel alınan verileri değiştirmez. Uygulamanız farklı harmanlamalar arasında veri dönüştürmeyi ve karşılaştırmayı açıkça işlemediği sürece veritabanındaki mevcut verileri yeni harmanlama işlemine taşımanız önerilir. Bu, uygulamaların verileri yanlış değiştirme riskini ortadan kaldırarak olası yanlış sonuçlara veya sessiz veri kaybına neden olur.

Veritabanı harmanlaması değiştirildiğinde, yeni veritabanı harmanlamasını varsayılan olarak yalnızca yeni tablolar devralır. Mevcut verileri yeni harmanlama işlemine dönüştürmek için birkaç alternatif vardır:

  • Verileri yerinde dönüştür. Var olan bir tablodaki bir sütunun harmanlamasını dönüştürmek için bkz. Sütun Harmanlamasını Ayarlama veya Değiştirme. Bu işlemin uygulanması kolaydır, ancak büyük tablolar ve meşgul uygulamalar için engelleyici bir sorun haline gelebilir. MyString sütununun yeni harmanlamaya yerinde dönüştürülmesi için aşağıdaki örneğe bakın:

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • Yeni harmanlamayı kullanan yeni tablolara veri kopyalayın ve aynı veritabanındaki özgün tabloları değiştirin. Geçerli veritabanında veritabanı harmanlamasını devralacak yeni bir tablo oluşturun, verileri eski tabloyla yeni tablo arasında kopyalayın, özgün tabloyu bırakın ve yeni tabloyu özgün tablonun adıyla yeniden adlandırın. Bu, yerinde dönüştürmeden daha hızlı bir işlemdir, ancak Yabancı Anahtar kısıtlamaları, Birincil Anahtar kısıtlamaları ve Tetikleyiciler gibi bağımlılıklarla karmaşık şemaları işlerken bir zorluk haline gelebilir. Ayrıca, veriler uygulamalar tarafından değiştirilmeye devam ederse, son kesmeden önce özgün tablo ile yeni tablo arasında son veri eşitlemesi gerekir. MyString sütununun yeni bir karakter kümesine "kopyala ve değiştir" yöntemiyle dönüştürülmesi için aşağıdaki örneğe bakın:

    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';
    
  • Yeni harmanlamayı kullanan yeni bir veritabanına veri kopyalayın ve özgün veritabanını değiştirin. Yeni harmanlamayı kullanarak yeni bir veritabanı oluşturun ve Integration Services veya SQL Server Management Studio'daki İçeri/Dışarı Aktarma Sihirbazı gibi araçlar aracılığıyla özgün veritabanından verileri aktarın. Bu, karmaşık şemalar için daha basit bir yaklaşımdır. Ayrıca, veriler uygulamalar tarafından değiştirilmeye devam ederse, son kesmeden önce özgün ve yeni veritabanları arasında son veri eşitlemesi gerekir.

Sınırlama

  • Windows Unicode-only harmanlamaları, COLLATE yan tümcesi ile yalnızca nchar, nvarcharve ntext veri türleri üzerinde sütun düzeyinde ve ifade düzeyindeki verilere uygulanarak kullanılabilir. Bir veritabanı veya sunucu örneğinin harmanlamasını değiştirmek için COLLATE yan tümcesiyle kullanılamazlar.

  • Belirtilen harmanlama veya başvuruda bulunan nesne tarafından kullanılan harmanlama Windows tarafından desteklenmeyen bir kod sayfası kullanıyorsa, Veritabanı Altyapısı bir hata görüntüler.

  • Azure SQL Yönetilen Örneği'nde sunucu düzeyinde harmanlama, örnek oluşturulduğunda belirtilebilir ve daha sonra değiştirilemez. Sunucu harmanlamaayarlama veya değiştirme bölümünde daha fazla bilgi edinin.

Önemli

ALTER DATABASE COLLATE deyimi Azure SQL Veritabanı'nda desteklenmez. CREATE DATABASE sırasında veritabanı harmanlamasını ve katalog harmanlamasını belirtin.