Konuyu görüntüle
IUCODERS FORUM > Programlama > Veritabanları > MS SQL Server 2005 ve ASP.NET ile türkçe karakter sorunu
Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
10.08.2006-10:24 #9338
Bir ASP.NET 2.0 uygulamasında SQL Server 2005 kullanıyorum. Uygulamayı kendi bilgisayarımda çalıştırırken Türkçe karakter sorunu yoktu ancak internetteki sunucudan çalışırken Türkçe karakterlerin bazıları veritabanına yanlış kaydoluyor.İ ler I, ı lar i, ş ler s oluyor. Management Studio ile değerleri değiştirdiğimde bir sorun olmuyor. Bunu nasıl önleyebilirim? Acaba Connection string'de bunun için bir parametre mi var?





Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
history


avatar
Er Diyari
Kayıt: 04.08.2006
10.08.2006-13:02 #9344
Öncelikle query analizer da normal bir sorgu ile veritabanına hic kayıt atıp sonucuna baktın mı? thinkingÖrnegin;

INSERT INTO tablom(ad, soyad) VALUES('Gökhan', 'Karacadağ')

Bu sekilde kaydettigin veri veritabanında nasıl kaydoluyor. Egr normalse, Projenin web.config dosyasına su satırı eklemeni oneririm. Zaten bunu ekle sen gene de:)

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="tr-TR" uiCulture="tr-TR"/>

Kolay Gelsin...





I.U. Tarih Bolumu 3. S?n?f



Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
10.08.2006-14:09 #9345
O satırı ekledim yine de olmadı.
Elle SQL konutu gönderdiğimde de aynı sorun oluyor. Okurken sorun yok. Manegement Studio ile elle girerken de sorun yok ama Sql komutu gönderdiğimde hatalı oluyor.
Bir de Collation diye bir olay var o ne acaba?






Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
halil


avatar

Kayıt: 01.01.2006
10.08.2006-19:13 #9349
veritabanının default collation ayarı : TURKISH_CI_AS şeklinde olmalı

bide head tagları arasına ;

<META http-equiv="Content-Type" content="text/html; charset=iso-8859-9">

eklemeyi dene ...





....
Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
10.08.2006-19:13 #9350
varchar yerine nvarchar veri tipini bir dene olmazsa farklı bir çözüm bulunur.





N/A
Yazar
history


avatar
Er Diyari
Kayıt: 04.08.2006
10.08.2006-21:16 #9351
orhan yazdi
 
varchar yerine nvarchar veri tipini bir dene olmazsa farklı bir çözüm bulunur.


unicode a gecerek duzelecegini pek zannetmiyorum, hem zaman geldiginde bazen varchar kullanmak daha mantıklı olabiliyor nvarchar kullanmaktan o zamanda problem yasamamak icin collation name i degistirmek gerekli.

bahsettigim kaydi sql sorgusu ile atip, olumsuz sonuc aldıgınıza gore collation nameiniz yanlis. Databasein managment studio da propertiesine bakarak bunu dogrulamalisiniz. Benim Sql Server 2000 deki databaselerim Halil Bey in de dedigi gibi TURKISH_CI_AS. Varolan bir database in collation name ini sql sorgusu ile degistirebilirsiniz. Diger bir yolda database i ve tabloları yeniden yaratıp verilerinizi migrate etmektir. Databasein collation name ini degistirmek icin ornegin su sekilde bir sorgu cagirabilirsiniz:

ALTER DATABASE [My_Database] COLLATE My_Collation

Örnek : ALTER DATABASE MyDatabase COLLATE TURKISH_CI_AS

Ancak sunu hemen belirtmeliyim; Veritabanının collation name ini degistirmeniz tablo columnlarınızda da collation name tanımlanmıssa bunları otomatik degistirmez. O yuzden sorun yaratan tablo kolonları içinde su sekilde bir kod calıstırabilirsiniz:

ALTER TABLE [My_Tabel] ALTER COLUMN [My_Column1] char(30) COLLATE <collation name>

Örnek : ALTER TABLE MyTable ALTER COLUMN MyColumn char(30) COLLATE TURKISH_CI_AS

Probleminiz çözülür inşallah. YAzdıgım sorgularda hata olabilir, sonucta yapacagınız işi göstermek istedim books onlinedan Alter Table ve Alter Database i incelersiniz hata varsa. Saygılar...





I.U. Tarih Bolumu 3. S?n?f



Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
10.08.2006-21:40 #9353
Veritabanındaki sorunu tam olarak anladım ve çözdüm.
Database Collation'ı Turkish_CI_AS yaptım. HTML kodlaması da utf-8. Şu anda herşey olması gerektiği gibi.
Hepinize teşekkür ederim.





Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
orhan


avatar
istanbul
admin
Kayıt: 17.11.2005
11.08.2006-00:39 #9354
create proc sp_get_coll
as
/*
declare @temp TABLE (
 col1 VARCHAR(32), 
 col2 VARCHAR(32),
 col3 VARCHAR(32),
 col4 VARCHAR(32),
 col5 VARCHAR(32)
)
insert @temp */
SELECT 
 CONVERT(varchar(50), obj.name) as tablo,
 CONVERT(varchar(50), col.name) as kolon,
 spt_dtp.LOCAL_TYPE_NAME as veritipi,
CONVERT(int, spt_dtp.charbin + 
CASE WHEN spt_dtp.LOCAL_TYPE_NAME IN ('nchar', 'nvarchar', 'ntext') 
THEN 2 * OdbcPrec(col.xtype, col.length, col.xprec) 
ELSE 
OdbcPrec(col.xtype, col.length, col.xprec) END) as boyut
, col.collation  as coll FROM    

sysobjects obj, 
master.dbo.spt_datatype_info spt_dtp, 
systypes typ, 
syscolumns col LEFT OUTER JOIN
syscomments com ON col.cdefault = com.id AND com.colid = 1, 
master.dbo.syscharsets a_cha
WHERE     
permissions(obj.id, col.name) != 0
AND obj.id = col.id 
AND typ.xtype = spt_dtp.ss_dtype 
AND (spt_dtp.ODBCVer IS NULL OR spt_dtp.ODBCVer = 2) 
AND obj.xtype IN ('U', 'V') 
AND col.xusertype = typ.xusertype
AND col.collation IS NOT NULL
AND (spt_dtp.AUTO_INCREMENT IS NULL OR spt_dtp.AUTO_INCREMENT = 0) 
AND a_cha.id = isnull(CONVERT(tinyint, CollationPropertyFromID(col.collationid, 'sqlcharset')),
CONVERT(tinyint, ServerProperty('sqlcharset')))
/*
select ( 'alter table '+col1+ ' alter column '+col2+' '
+col3+'('+col4+') collate '+col5 ) from @temp
*/
go

bunu
 

exec sp_get_coll

şeklinde çalıştır.
bu dbde tabloda bulunan string tipindeki verilerin db de hangi dil karakter seti vs.. ile tutulduğunu gösterir





N/A
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb