Skip to content

MSSQL Collation Management

Published: at 11:32 PM

Collation in Microsoft SQL Server defines the rules for how data is sorted and compared. It is essential for managing multilingual data and ensuring consistency across database objects. This guide covers changing the collation of a database and its columns.

Changing Database Collation

To change the collation of an MSSQL database:

  1. Open SQL Server Management Studio (SSMS).

  2. Navigate to your target database.

  3. Right-click the database and select Properties.

  4. Go to the Options tab.

  5. Under Collation, choose the desired collation from the dropdown.

    ⚠️ Note: Changing the collation at the database level does not automatically update the collation of existing columns.

Updating Column Collation

For tables within the database, you need to explicitly update the collation for each column. Use the following steps:

  1. Identify all columns with the current collation:
 SELECT TABLE_NAME, COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YourDatabaseName'
 AND COLLATION_NAME IS NOT NULL;
  1. Generate and execute scripts to alter column collation:
ALTER TABLE YourTable
ALTER COLUMN YourColumn NVARCHAR(255) COLLATE Latin1_General_CI_AS NOT NULL;

Script to Automate Collation Changes

For automating the process, you can generate a script to update all columns:

DECLARE @sql NVARCHAR(MAX) = '';

SELECT @sql = @sql +
    'ALTER TABLE ' + TABLE_SCHEMA + '.' + TABLE_NAME +
    ' ALTER COLUMN ' + COLUMN_NAME +
    ' ' + DATA_TYPE + '(' +
    CASE
        WHEN CHARACTER_MAXIMUM_LENGTH = -1 THEN 'MAX'
        ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR)
    END + ') COLLATE Latin1_General_CI_AS ' +
    CASE IS_NULLABLE
        WHEN 'NO' THEN 'NOT NULL'
        ELSE 'NULL'
    END + '; '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'YourDatabaseName'
  AND COLLATION_NAME IS NOT NULL;

PRINT @sql;
-- EXEC sp_executesql @sql; -- Uncomment to execute

Considerations

Example:

Changing Collation for a Database and Its Columns

  1. Update the database collation:
ALTER DATABASE YourDatabaseName COLLATE SQL_Latin1_General_CP1_CI_AS;
  1. Update a column:
ALTER TABLE YourTableName
ALTER COLUMN YourColumnName NVARCHAR(255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL;

Previous Post
Fix for VS cshtml Files Not Opening
Next Post
MSSQL Full-Text Search Configuration and Check