Nous avons une base de données existante avec certaines colonnes (plus anciennes) utilisant "SQL_Latin1_General_CP1_CI_AS" et des modifications plus récentes utilisant "Latin1_General_CI_AS".
Cela pose un problème, car les jointures ont besoin de l'instruction COLLATE supplémentaire pour fonctionner.
J'aimerais tout ramener à "Latin1_General_CI_AS". D'après ce que je peux comprendre, ce sont des classements plus ou moins identiques et je ne perdrai pas de données au cours de ce processus ...
Est-ce que quelqu'un sait si c'est le cas?
Il y a plus d'informations sur ce forum MSDN:
Quels États:
Vous devriez voir peu de différence si le classement est SQL_Latin1_General_CP1_CI_AS ou Latin1_General_CI_AS, mais les deux ont des instances où ils sont plus rapides ou plus lents que l'autre.
Latin1_General_CI_AS: - Latin1-Général, insensible à la casse, accent - sensible, insensible au kanatype, insensible à la largeur
SQL_Latin1_General_CP1_CI_AS: - Latin1-Général, insensible à la casse, sensible aux accents, insensible au kanatype, insensible à la largeur pour Unicode Data, Ordre de tri SQL Server 52 sur la page de code 1252 pour les données non Unicode
Par conséquent, à mon avis, vous ne devriez pas voir de différence, en particulier si vos données ne sont que des données a-z0-9.
Voici une réponse plus complète:
La principale différence entre ces classements réside dans la manière dont ils appliquent les règles d'expansion des personnages. Certains caractères latins peuvent être développés en plusieurs caractères. Les classements SQL_xxxx peuvent ignorer ces développements de caractères lors de l'utilisation de texte non-unicode, mais les appliquer au texte unicode. En conséquence, les jointures, les tris et les comparaisons peuvent donner des résultats différents lorsque vous utilisez un classement par rapport à un autre.
Exemple:
Sous Latin1_General_CI_AS
, ces deux instructions renvoient le même jeu d'enregistrements, car ß
est développé en ss
.
SELECT * FROM MyTable3 WHERE Comments = 'strasse'
SELECT * FROM MyTable3 WHERE Comments = 'straße'
Lorsque vous utilisez SQL_Latin1_General_CP1_CI_AS
, les instructions ci-dessus renvoient des enregistrements différents, car ß
est traité comme un caractère différent de ss
.
SELECT * FROM ::fn_helpcollations()
WHERE name IN (
'SQL_Latin1_General_CP1_CI_AS',
'Latin1_General_CI_AS'
)
... donne ...
Latin1_General_CI_AS: Latin1-Général, insensible à la casse, sensible à l’accent, insensible au kanatype, insensible à la largeur
SQL_Latin1_General_CP1_CI_AS: Latin1-Général, insensible à la casse, sensible aux accents, insensible au type de kanat, insensible à la largeur pour les données Unicode, ordre de tri SQL Server 52 sur la page de code 1252 pour les données non Unicode
Donc, à partir de là, je déduirais que la page de code utilisée est la même (Latin1-General => 1252), de sorte que vous ne devriez pas rencontrer de perte de données - si quelque chose devait changer après la conversion, cela pourrait être le genre ordre - ce qui est probablement immatériel.