IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Changement de collation du serveur


Sujet :

Administration SQL Server

  1. #1
    Invité
    Invité(e)
    Par défaut Changement de collation du serveur
    Bonjour,

    Dans le cadre d'un projet de migration vers 2022, nous changeons de collation serveur. Nous allons donc également faire ce changement au niveau des bases de données. Avez vous des préco, astuces pour gagner du temps pour effectuer ce changement sur plusieurs bases en même temps? Retrait des clés/indexes. Je souhaite avoir des retours d'expérience.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Pour qu'il soit effectif sur les données actuelles un changement de collation de la base nécessite un import export des données. En effet la collation fait partie du type des données. Une fois les données "stockées" dans les lignes des tables, la collation opère...
    Quel est votre objectif pour un tel changement ???
    Quel est la collation source et la collation cible ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Invité
    Invité(e)
    Par défaut
    SQL_Latin1_General_CP1_CI_AS vers Latin1_General_100_CI_AS_SC_UTF8 dans le but de pouvoir intégrer des caractères etrangers. Nous allons garder la structure de nos colonnes, juste ajuster la taille de celles ci lorsqu on changera la collation des dB pour eviter de tronquer.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Les caractères de l'ensemble des langues étrangères ne nécessitent aucunement l'utilisation d'UTF8. UTF8 est un encodage qui bénéficie à la langue anglaise uniquement et pourrie le stockage des alphabets non latin en utilisant 3 octets au lieu de deux (par exemple pour de l'arabe de l'hébreu ou du chinois...).

    Pour stocker des chaines de caractères avec des langues non latines, il faut juste utiliser du NVACHAR ou du NCHAR.

    Inutile donc d'utiliser de l'UTF8 pour pourrir d'avance vos performances !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Invité
    Invité(e)
    Par défaut
    L'idée est justement de ne pas convertir l'ensemble du legacy char,varchar en nvarchar.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    Encore une fois ce n'est pas le changement de collation qui vous fera cela... Ce sera juste plus complexe casse geule et contre performant.

    LE SEUL MOYEN DE STOCKER DES CARACTÈRES NON LATIN EST D'UTILISER LES TYPES NCHAR et NVARCHAR.

    Avant de vous lancer dans de folles modifications, il faudrait peut être commencer à se former !

    Et vous vous prétendez DBA.... ça promet !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 763
    Points : 1 468
    Points
    1 468
    Par défaut
    Citation Envoyé par Invité Voir le message
    SQL_Latin1_General_CP1_CI_AS vers [...]
    Il est judicieux de ne pas continuer avec des collations dont le nom commencent par SQL_% car elles ne sont pas compatibles avec celles de Windows.
    https://learn.microsoft.com/fr-fr/sq...l-server-ver16

    Sur le fond, Frédéric à raison ; qu'on puisse choisir l'encodage juste en ajoutant un N devant le type est une chance, c'est tout à la fois pertinent et performant.
    Du coup on ne transforme en Unicode que les colonne dont l'usage le requiert.
    (sur la forme, je pense qu'il en fait des caisses juste pour garder sa signature )

    D'autant plus que la collation Latin1_general s'appuie sur la page code 1252 qui comporte pas mal de caractères diacritiques.
    A vous de voir si les "caractères étrangers" dont vous allez avoir besoin ne sont pas déjà supportés
    https://fr.wikipedia.org/wiki/Windows-1252

    Du point de vue des performances, il est plus important de typer en CHAR qu'en VARCHAR.
    Le stockage est plus économe en place, donc plus performant.
    De mon retour d'expérience, jusqu'à 4 caractères le type CHAR s'impose.
    Au delà, faut voir au cas par cas (nb : ne pas sous estimer les gains potentiels de stocker sous forme numérique les différents "code")
    En tous les cas faut chasser les infamies, produites en masse par les ORM, NVARCHAR(1) (au lieu de BIT)

    Le nombre max de caractères est utile, du point de vue des perf, pour tailler les différents SET.
    Utiliser des VARCHAR(max) à retour de bras est dispendieux.

    Alors, oui, ce discours est très "legacy" et la jeune génération des développeurs milite pour choisir le plus généraliste et large possible.
    La compréhension viendra lors des problèmes de perf
    Ce qu'il y a de bien avec la technique, c'est que c'est pas la peine de s'époumoner, ça finira par arriver
    Le savoir est une nourriture qui exige des efforts.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 262
    Points : 39 372
    Points
    39 372
    Billets dans le blog
    9
    Par défaut
    @Michel, d'accord avec l'ensemble à un détail près :

    Citation Envoyé par Michel.Priori Voir le message
    Du point de vue des performances, il est plus important de typer en CHAR qu'en VARCHAR.
    Le stockage est plus économe en place, donc plus performant.
    De mon retour d'expérience, jusqu'à 4 caractères le type CHAR s'impose.
    Pour ma part, en deçà d'une vingtaine de caractères, je n'utilise pas le varchar : non seulement l'attribut de longueur augmente de 1 à 3 octets (selon le SGBD) la taille effective de la colonne, mais en plus, le varchar provoque une fragmentation des espaces data et index en cas d'update avec modification de la longueur, et requiert un réalignement sur longueur fixe pour certaines opérations (ORDER BY, GROUP BY, DISTINCT, PARTITION BY), deux phénomènes qui plombent les perfs.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 763
    Points : 1 468
    Points
    1 468
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Pour ma part, en deçà d'une vingtaine de caractères, je n'utilise pas le varchar
    Le fait qu'il y ait un seuil à partir du quel il faille procéder à des tests, nous est commun.
    La conversation porte sur la valeur du seuil.

    Pour prouver que c'est effectivement "rentable" de rester en CHAR, il faudrait faire des tests de perfs pour chaque colonne (et, idéalement, de bout en bout pour prendre en compte le poids du protocole qui permet de transformer le SET en un flux)
    J'avoue que je ne le fait que très rarement.

    Le problème que ça me pose est que l'audit se fait sur des données réelles, ne serait-ce pour pouvoir calculer la distribution des différentes longueurs de chaine.
    Alors même que le concepteur implémente le type sur des présupposés.
    C'est facile de corriger a posteriori !

    Exemple : les codes barre (https://fr.wikipedia.org/wiki/Code-barres_EAN)
    Si on exclue le code barre 128 et les add-on de l'EAN13(rare), faut-il faire un char(13) ou un varchar(13) ?
    A noter : cet exemple invalide l'hypothèse de la fragmentation suite à une mise à jour ; on ne met pas/peu à jour un code barre pour en changer de norme, on crée alors un nouvel article.
    Pour moi, tout dépend de l'usage effectif. On peut tout à fait imaginer qu'il n'y ait que très peu de EAN13 pour une écrasante majorité de EAN8, disons moins de 50 pour plus de 900 000 articles.
    Intuitivement (donc sans avoir fait les tests) je penche pour un varchar dans cette situation.
    Aussi courte soit elle, au delà de 4 caractères, je fais une analyse de la situation.
    Le savoir est une nourriture qui exige des efforts.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. changement de domain-Probleme serveur
    Par mbyforum dans le forum Développement
    Réponses: 0
    Dernier message: 01/02/2011, 10h40
  2. Changement de charset côté serveur
    Par T_Joe dans le forum Administration
    Réponses: 8
    Dernier message: 18/11/2008, 11h04
  3. changement de logiciel de serveur et erreur
    Par afrodje dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2007, 12h18
  4. [CR7] Comment effectuer simplement un changement de nom de serveur
    Par onipif dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/02/2007, 15h39
  5. Changement de collation des champs d'une table
    Par lalyly dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2006, 09h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo