SQL'de DB, Tablo ve Sutun Collation Değiştirme

  • Konbuyu başlatan Konbuyu başlatan Alger
  • Başlangıç tarihi Başlangıç tarihi

Alger

Member
Katılım
28 Eki 2008
Mesajlar
481
Reaction score
0
Puanları
16
Yaş
43
Evet Arkadaşlar bu yeni çıkan 1453 dosyaları çince ve db nin dili chines_prc diye bir dil bu dili değiştirmek için bulduğum bi yolu paylaşıcam bunu ayrıca diğer server sahibleride yapabilir bazen hata verir

hata şu şekildedir..


Cannot resolve the collation conflict between “SQL_Latin1_General_CP1_CI_AS” and “Turkish_CI_AS” in the equal to operation

bu hatanın sebebi ise iki tablo veya iki farklı tablodaki sutunların dili farklı olduğunda bu hatayı verir.

böyle bir hata alıryorsanız bu altta verdiğim kodu db nize uygulayın

ilk önce sqli kullanan tüm programları panelinizi appservi veya xammp ı kapatın

sonra

1. kod


Kod:
[I]ALTER DATABASE kn_online COLLATE [/I][I]SQL_Latin1_General_CP1_CI_AS[/I]
bunu uyguladık bu yukarıdaki kod DB mizin Default dilini SQL_Latin1_General_CP1_CI_AS yaptı ondan sonra alttaki kod uygulıycaz tabi bu kod direk işlem yapmıyor QA da alttaki 1 rows felan yazan yere
DB nin Default Dili İle aynı dili taşımayan sutunlarını aynı dile çevirme kodunu veriyor



NOT: Bu KOD Sadece SQL 2005 ve 2021 De Çalışır...


Kod:
[I]DECLARE @new_collation varchar(100)
DECLARE @debug bit
DECLARE
@table sysname,
@previous sysname,
@column varchar(60),
@type varchar(20),
@legth varchar(4),
@nullable varchar(8),
@sql varchar(8000),
@msg varchar(8000),
@servercollation varchar(120)
/*

uncomment one of the following lines:
*/
set @new_collation = convert(sysname, databasepropertyex(DB_NAME(), 'collation'))
--- set @new_collation = convert(sysname, serverproperty('collation'))
/*

@debug = 0 to execute
*/
set @debug = 1
if @new_collation is null

begin

print 'which collation?'

goto einde

end
DECLARE C1 CURSOR FOR

select 'Table' = b.name,

'Column' = a.name,

'Type' = type_name(a.system_type_id),

'Length' = a.max_length,

'Nullable' = case when a.is_nullable = 0 then 'NOT NULL' else ' ' end

from sys.columns a

join sysobjects b

on a.object_id = b.id

where b.xtype = 'U'

and b.name not like 'dt%'

and type_name(a.system_type_id) in ('char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext')

and a.[collation_name] <> @new_collation

order by b.name,a.column_id
OPEN C1
FETCH NEXT
FROM C1
INTO @table,@column,@type,@legth,@nullable
set @previous = @table
WHILE @@FETCH_STATUS = 0
BEGIN

if @table <> @previous print ''

set @sql = 'ALTER TABLE ' + QUOTENAME(@table) + ' ALTER COLUMN ' + QUOTENAME(@column) + ' '

set @sql = @sql + @type + '(' + @legth + ')' + ' COLLATE ' + @new_collation + ' ' + @nullable

print @SQL

if @debug = 0 

begin

begin try

EXEC (@sql)

end try

begin catch

print 'ERROR:' + ERROR_MESSAGE()

print '' 

end catch

end

set @previous = @table

FETCH NEXT

FROM C1

INTO @table,@column,@type,@legth,@nullable

END
CLOSE C1
DEALLOCATE C1
einde: [/I]
şu şekilde alttaki bölümde yazılar çıkar

Kod:
ALTER TABLE [__PANEL_NEWS] ALTER COLUMN [Msg] varchar(-1) COLLATE SQL_Latin1_General_CP1_CI_AS  
ALTER TABLE [__PANEL_NEWS] ALTER COLUMN [Msg_full] varchar(-1) COLLATE SQL_Latin1_General_CP1_CI_AS  
 
ALTER TABLE [FRIEND_LIST] ALTER COLUMN [strUserID] char(21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL

şeklinde bunları ister komple kopyalayıp QA dan girin isterseniz tek tek girin benim tavsiyem tek tek girmeniz çünkü Set Primary Key İşaretli sutunları değiştirmez...
yapabildiğiniz kadarını yapın hata verenler (Set Primary Key işaretli olanlar) en son işiniz bittiğinde elle değiştirirsiniz . tablo Desing Sutuna tıklar Collation a gelip sql_latin yaparsınız.


Umarım Yardımcı Oldum Kodlar Hariç Alıntı Değildir. Alger
 
Cevap: SQL'de DB, Tablo ve Sutun Collation Değiştirme

Paylaşım İçin Teşekkürler
 
Cevap: SQL'de DB, Tablo ve Sutun Collation Değiştirme

Kodların 2000 versionunun çalışanı varmı?
 
Geri
Üst Alt