Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'opérateur LIKE est-il sensible à la casse avec MSSQL Server ?

Ce n'est pas l'opérateur qui est sensible à la casse, c'est la colonne elle-même.

Lorsqu'une installation SQL Server est effectuée, un classement par défaut est choisi pour l'instance. Sauf mention contraire explicite (vérifiez la clause collate ci-dessous), lorsqu'une nouvelle base de données est créée, elle hérite de la collation de l'instance et lorsqu'une nouvelle colonne est créée, elle hérite de la collation de la base de données à laquelle elle appartient.

Un classement comme sql_latin1_general_cp1_ci_as dicte comment le contenu de la colonne doit être traité. CI signifie insensible à la casse et AS signifie sensible aux accents.

Une liste complète des classements est disponible sur https ://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx

(a) Pour vérifier un classement d'instance

select serverproperty('collation')

(b) Pour vérifier un classement de base de données

select databasepropertyex('databasename', 'collation') sqlcollation

(c) Pour créer une base de données en utilisant un classement différent

create database exampledatabase
collate sql_latin1_general_cp1_cs_as 

(d) Pour créer une colonne en utilisant un classement différent

create table exampletable (
    examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null
)

(e) Pour modifier un classement de colonne

alter table exampletable
alter column examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null

Il est possible de modifier une instance et les classements de base de données, mais cela n'affecte pas les objets créés précédemment.

Il est également possible de modifier un classement de colonne à la volée pour la comparaison de chaînes, mais cela est fortement déconseillé dans un environnement de production car cela est extrêmement coûteux.

select
  column1 collate sql_latin1_general_cp1_ci_as as column1
from table1