2013-08-20 27 views
7

Rusça metinlerle çalışıyorum ancak sorguları çalıştırdığımda bana bunu gösteriyor. Veritabanı Ruslar tarafından kullanılacak ve Rusça metni düzgün bir şekilde göstermelidir!sql server 2012 express Rusça harfleri anlamıyor

enter image description here

herhangi bir fikir nasıl düzeltilir? Gelecekte Rusya'da bulunacak ve SQL Server SQL Server ile çalışacak, ancak şu anda İngilizce versiyonu SQL 2012 Express üzerinde çalışıyorum.

Create table Employee 
(
EmpID int not null IDENTITY (10, 1), 
StrName nvarchar (25) not null, 
Phone1 nvarchar (25) not null, 
Phone2 nvarchar (25) 
Primary Key (EmpID), 
); 
insert into Employee (LastName , FirstName,Phone1,Phone2) 
    values ('Иванов','111 111 11111','111 111 1111'); 
+0

Sütununuz varchar mı, yoksa nvarchar mı? – Gabe

cevap

16

size verileri doğru veritabanında depolanmış emin misiniz: Burada

masa ve insert ifade doğrudur? Nereden biliyorsunuz?

Sütunun, uygun bir harmanlama olduğundan, nvarchar olarak tanımlandığından ve dize değişmezlerinin eklerinin N ile önceden eklenmiş olduğundan emin olun. Örneğin, bu aynı değildir: Örnek olarak

INSERT dbo.table(column) SELECT 'foo'; 
INSERT dbo.table(column) SELECT N'foo'; 

:

USE tempdb; 
GO 

CREATE TABLE dbo.foo 
(
    ID INT PRIMARY KEY, 
    bar NVARCHAR(32) COLLATE SQL_Ukrainian_CP1251_CI_AS 
); 

INSERT dbo.foo SELECT 1,'АБВГДЕЖЅZЗИІКЛ'; 
INSERT dbo.foo SELECT 2,N'АБВГДЕЖЅZЗИІКЛ'; 

SELECT ID, bar FROM dbo.foo; 
GO 
DROP TABLE dbo.foo; 

Sonuçlar:

ID bar 
---- -------------- 
1  ????????Z????? 
2  АБВГДЕЖЅZЗИІКЛ 

Ve bu senin ekleme deyimini nasıl etkilediğini göstermek için, dize eksik N öneki:

SELECT 
    CONVERT(NVARCHAR(32), 'Иванов'), 
    CONVERT(NVARCHAR(32), N'Иванов'); 

Sonuçlar:

------ ------ 
?????? Иванов 

Yani, N'a prefix' veya kaybetmek verilerle Unicode dizeleri önek.

+0

Thanx!çalışıyor gibi görünüyor, bu yüzden her alana herhangi bir metin eklemeden önce her zaman 'N' kullanmak zorunda mıyım? – Andrey

+1

Unicode (nchar/nvarchar) olan bir sütuna ve dize değişmezliği temel ASCII karakter kümesinin dışındaki karakterleri içerdiğinde ekleme yapmanız gerekir. Yani, özünde: evet. –

2

Aaron Bertrand iyi bir açıklama vermesine rağmen neden böyle bir sonuç aldığınızı söylerseniz, tüm harfleri 'N' ile Rusça harflerle ön eklemenin bir yolu yoktur.
Bildiğim kadarıyla, sunucu derlemenizi doğru şekilde ayarladınız.

select 
    'español', '平成年月日', 'иван', 
    serverproperty('collation') 

sonuç: Eğer Cyrillic_General_CI_AS gibi, örneğin, harmanlamayı Yani, sunucu düzgün Rus harflerle varchar davranırsın Gördüğünüz gibi

espanol ????? иван Cyrillic_General_CI_AS 

, İspanyol ve Japon dizeleri iyi tedavi edilmediğinde Rus dizeleri ise. Yani ben saklı prosedürler varsayılan dizeleri, nvarchar parametreleri olarak Veritabanımızda nvarchar veri türü kullanıyorum dedim 'N'

dizelerle önek olarak eklemeden nvarchar sütunlar halinde veri ekleyebilir. Çok nadiren kodda Rusça dizeleri kullanıyorum (sadece bir şeyi test etmek istediğimde) ve hiç N'string' sözdizimini kullanmadım.

Doğru varsayılan harmanlama işlemi kullanışlı olsa da, bu çözümle ilgili bir sorun var - bu, change default collation on installed SQL Server için kolay değildir, bu nedenle SQL Server örneğini yüklerken dikkatli olmanız ve harmanlamayı uygun şekilde seçmeniz gerekir.

+0

Bu durumda tembel olmanıza izin verirken, sorun şu ki [sunucu harmanlamasını değiştirmek bir acıdır] (http://technet.microsoft.com/en-us/library/ms179254.aspx) (ve Diğer sorunlara neden olur) ve Unicode dizgilerini önbelleğe alma alışkanlığı da başka bir yerde sorunlara yol açabilir - her zaman sunucu harmanlamasını değiştirmek için büyülü bir yeteneğe sahip olmazsınız. –

+0

@AaronBertrand evet, sunucu derlemesini değiştirmek gerçekten bir acıdır, ancak bu bilgi OP –

+0

için yararlı olabilir. Cevabınız, sunucu harmanlamasını değiştirmenin N önekine gerek duymadan N tarafından önceden eklenecek dizelere N ön ekinin eklenmesinden daha kolay olduğunu ima etmemelidir. sunucu harmanlama. Ya da sunucu değiştirmeyi (ve yakalananları) değiştirmenin tüm adımlarını içerebilir. Şu anda bu daha kolay gibi geliyor ve öyle değil. –

İlgili konular