OVH Cloud OVH Cloud

Changement de collation sur bases existantes

4 réponses
Avatar
Gilles
Bonjour a tous,

Par défaut toutes nos bases et champs de type chaine alpha (char, varchar
...) ont reçu la collation par défaut FRENCH_CI_AS

Nous nous somme aperçu que cette collation nous convenais pas ...

Comment changer les collations de toutes nos colonnes de nos base ?

J'ai déja un source qui reprend toutes mes colonnes
SELECT * From INFORMATION_SCHEMA.Columns WHERE DATA_TYpe like '%char%' ORDER
BY TABLE_NAME

Mais on ne peut pas le basculer en Update car ce n'est qu'une table d'info

Et je suppose qu'il faut aussi changer le patramétrage par défaut de toutes
les bases afin d'avoir, lors de prochaine ajour de champ type chaine la
collation adéquate :-), comment faire ?


Merci pour vos réponses

Gilles

4 réponses

Avatar
bruno reiter [MVP]
un conseil, si possible, créer de nouvelles bases avec le bon collate,
transférer les données en passant par de l'ASCII,
détacher les bases,
réinstaller le serveur avec le bon collate,
rattacher les bases

attention, ce qui est dans master est perdu
scripter les jobs, opérateurs, alertes pour les remmtre dans msdb

dur, dur ... mais à terme beaucoup moins de problèmes (tempdb en
particulier)

br

"Gilles" wrote in message
news:eLz7Tp$
Bonjour a tous,

Par défaut toutes nos bases et champs de type chaine alpha (char, varchar
...) ont reçu la collation par défaut FRENCH_CI_AS

Nous nous somme aperçu que cette collation nous convenais pas ...

Comment changer les collations de toutes nos colonnes de nos base ?

J'ai déja un source qui reprend toutes mes colonnes
SELECT * From INFORMATION_SCHEMA.Columns WHERE DATA_TYpe like '%char%'
ORDER BY TABLE_NAME

Mais on ne peut pas le basculer en Update car ce n'est qu'une table d'info

Et je suppose qu'il faut aussi changer le patramétrage par défaut de
toutes les bases afin d'avoir, lors de prochaine ajour de champ type
chaine la collation adéquate :-), comment faire ?


Merci pour vos réponses

Gilles




Avatar
Gilles
WAOUWWWW !!

Et ALTER TABLE
ALTER COLUMN

n'est pas conseillé
j'avais commencé se source qui pour l'intant est loin de marché :-)

DECLARE @Collation varchar(128),
@SQL VarChar(2000),
@DerniereTable VarChar(128),
@LaTable VarChar(128),
@LaColonne VarChar(128)

SET @Collation = ' COLLATE ''SQL_Latin1_General_CP1_CI_AS'''

DECLARE CurTables CURSOR
FOR
SELECT TABLE_NAME,COLUMN_Name
FROM INFORMATION_SCHEMA.COlumns
WHERE DATA_TYpe like '%char%' ORDER BY TABLE_NAME
OPEN CurTables
FETCH Curtables INTO @latable,@Lacolonne
WHILE @@Fetch_Status = 0
BEGIN
IF @LaTable <> @DerniereTable
BEGIN
SET @SQL = 'ALTER TABLE ' + @LaTable + @Collation
EXEC(@SQL)
SET @DerniereTable = @LaTable
END
SET @SQL = 'ALTER TABLE ' + @LaTable + ' ALTER COLUMN ' + @LaColonne +
@Collation
EXEC(@SQL)
FETCH Curtables INTO @latable,@Lacolonne
END
CLOSE CurTables
DEALLOCATE CurTables


Il scan tous les colonnes de ttype char de ma base et après je veux changer
le collate de chaque !!!

C'est donc impossible
Avatar
bruno reiter [MVP]
ce n'est pas impossible, mais ça va être un enfer à terme, et tu es sûr
d'avoir de gros ennuis à moyen ou long terme.

br

"Gilles" wrote in message
news:%2310$
WAOUWWWW !!

Et ALTER TABLE
ALTER COLUMN

n'est pas conseillé
j'avais commencé se source qui pour l'intant est loin de marché :-)

DECLARE @Collation varchar(128),
@SQL VarChar(2000),
@DerniereTable VarChar(128),
@LaTable VarChar(128),
@LaColonne VarChar(128)

SET @Collation = ' COLLATE ''SQL_Latin1_General_CP1_CI_AS'''

DECLARE CurTables CURSOR
FOR
SELECT TABLE_NAME,COLUMN_Name
FROM INFORMATION_SCHEMA.COlumns
WHERE DATA_TYpe like '%char%' ORDER BY TABLE_NAME
OPEN CurTables
FETCH Curtables INTO @latable,@Lacolonne
WHILE @@Fetch_Status = 0
BEGIN
IF @LaTable <> @DerniereTable
BEGIN
SET @SQL = 'ALTER TABLE ' + @LaTable + @Collation
EXEC(@SQL)
SET @DerniereTable = @LaTable
END
SET @SQL = 'ALTER TABLE ' + @LaTable + ' ALTER COLUMN ' + @LaColonne +
@Collation
EXEC(@SQL)
FETCH Curtables INTO @latable,@Lacolonne
END
CLOSE CurTables
DEALLOCATE CurTables


Il scan tous les colonnes de ttype char de ma base et après je veux
changer le collate de chaque !!!

C'est donc impossible



Avatar
Fred BROUARD
Bonjour,

j'ai écrit cet article qui vous renseignera sur une partie de la problématique :
http://sqlpro.developpez.com/cours/sqlserver/collations/

Cepandant, le changement de collation au niveau de la base avec une collation
différente au niveau du serveur affectera sensiblement les performances. Il vaut
mieux en effet changer la collation du serveur. C'est seulement dans ce cas que
les performances s'améliorerons.
Mais cela possède quelques particularités parmi lesquelles la plus importante
est celle-ci :
si vous choisissez une collation forte (sensible à la casse et aux accents)
alors TOUS les noms d'objets SQL vont devenir sensible à la casse.
Ce qui signifie que dans vos applications comme dans votre code Transact SQL, si
vous avez créé une table de nom TCommandeEnCours, alors l'appel de cet objet
dans une requête de cette manière :
SELECT *
FROM tCVommandeENcours
provoquera une erreur !

A +

Gilles a écrit:
Bonjour a tous,

Par défaut toutes nos bases et champs de type chaine alpha (char, varchar
...) ont reçu la collation par défaut FRENCH_CI_AS

Nous nous somme aperçu que cette collation nous convenais pas ...

Comment changer les collations de toutes nos colonnes de nos base ?

J'ai déja un source qui reprend toutes mes colonnes
SELECT * From INFORMATION_SCHEMA.Columns WHERE DATA_TYpe like '%char%' ORDER
BY TABLE_NAME

Mais on ne peut pas le basculer en Update car ce n'est qu'une table d'info

Et je suppose qu'il faut aussi changer le patramétrage par défaut de toutes
les bases afin d'avoir, lors de prochaine ajour de champ type chaine la
collation adéquate :-), comment faire ?


Merci pour vos réponses

Gilles





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************