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

MS SQL Server Discussion :

Migrer une base de données SQL Server en Unicode ?


Sujet :

MS SQL Server

  1. #1
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut Migrer une base de données SQL Server en Unicode ?
    Bonjour,

    Je suis en train de migrer des bases de données Oracle de la version 11g à la version 12c, par export / import et j'en profite au passage
    pour changer de jeu de caractères, et passer ainsi mes bases en Unicode.

    En théorie, pour utiliser l'Unicode, on doit utiliser NCHAR, NVARCHAR... comme type de données.

    Mais avec Oracle, pas besoin car Oracle dispose de 2 jeux de caractères. Le "Character Set" pour les types de données en CHAR, VARCHAR, CLOB... et le "National Character Set" pour les types de données en NCHAR, NVARCHAR, NCLOB.

    Le "National Character Set" est en Unicode (AL16UTF16).

    Le "Character Set" accepte lui des jeux de caractères mono-byte comme le WE8MSWIN1252 ou le WE8ISO8859P15, mais aussi des jeux de caractères Unicode comme l'UTF8 ou plus récent (AL32UTF8).

    Ainsi je peux conserver mes types de données CHAR, VARCHAR... et exporter ma base source 11g en WE8MSWIN1252, pour l'importer dans une base 12c en AL32UTF8.




    Par contre, si je devais faire pareil sur SQL Server (le cas ne s'est pas encore présenté pour le moment), comment dois-je procéder ?

    En clair, si j'ai une base SQL Server non Unicode, avec une centaine de tables et des centaines voire des milliers de colonnes en CHAR, VARCHAR, TEXT comme type de données, j'ai l'impression que je dois forcément convertir toutes ces colonnes en NCHAR, NVARCHAR et NTEXT. C'est bien cela ?

    Si oui, comment s'y prend on pour faire cela de la manière la plus efficace possible ?

    Merci pour vos réponses.

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    D'abord posez vous la question de savoir si c'est nécessaire pour toutes vos colonnes, car l'impact n'est pas négligeable. Cela double la volumétrie des données littérales.

    Dans SQL Server les littéraux sont stockés indépendamment du jeux de caractères si vous utilisez les collations sémantiques (celle dont le nom de commence pas par SQL...). Les dataset seront donc de l'ASCII ou de l'UNICODE selon votre demande via le middleware (ODBC, NCLI...).

    Pour modifier du support ASCII vers l'UNICODE, il faut donc utiliser des NCHAR et NVARCHAR. À noter le type TEXT est obsolète depuis la varsion 2005 soit 12 ans !!! Remplacez le par du VARCHAR(max)/ NVARCHAR(max).

    Pour modifier une colonne d'une table de CHAR/VARCHAR vers du NATIONAL il suffit de faire un ALTER TABLE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ma_table ALTER COLUMN ma_colonne NouveauType;
    Pour toute les colonnes, vous pouvez utiliser la requête suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT N'ALTER TABLE ['  + C.TABLE_SCHEMA + N'].[' + C.TABLE_NAME 
           + N'] ALTER COLUMN [' + C.COLUMN_NAME + '] '
           + CASE DATA_TYPE 
                WHEN 'text' THEN 'NVARCHAR(max)' 
                ELSE 'n' + DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(16)) + ')' 
             END + ';'
    FROM   INFORMATION_SCHEMA.TABLES AS T
           JOIN INFORMATION_SCHEMA.COLUMNS AS C
                ON T.TABLE_SCHEMA = C.TABLE_SCHEMA
                AND T.TABLE_NAME = C.TABLE_NAME 
    WHERE TABLE_TYPE = N'BASE TABLE'
      AND DATA_TYPE IN ('varchar', 'char', 'text');
    Qui générera les ALTER pour toutes les colonnes.

    Cependant, pour les colonnes ayant des index ou participant à des contraintes, vous devrez d'abord supprimer ces objets et les recréer ensuite.

    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
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Un grand merci.

    C'est très clair, comme d'habitude.

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

Discussions similaires

  1. [SQL-Server] Connexion à une base de donnée SQL Server
    Par dieudo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/05/2006, 14h00
  2. Réponses: 4
    Dernier message: 18/01/2006, 21h30
  3. Importation d'une base de donnée sql server vers oracle
    Par delphy456 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/01/2006, 14h44
  4. Réponses: 3
    Dernier message: 01/09/2005, 16h24
  5. Réponses: 3
    Dernier message: 29/03/2004, 18h02

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