web-dev-qa-db-fra.com

SQL Server SQL_Latin1_General_CP1_CI_AS peut-il être converti en toute sécurité en Latin1_General_CI_AS?

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?

20
Kram

Il y a plus d'informations sur ce forum MSDN:

http://social.msdn.Microsoft.com/Forums/en-US/sqlgetstarted/thread/196b4586-1338-434d-ba8c-49fa3c9bdeeb/

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.

13
dunos

Voici une réponse plus complète:

https://www.olcot.co.uk/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as/

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.

26
Zarepheth
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.

5
Will A