2013-08-20 13 views
7

मेरे पास डीबी है जो रूसी पाठ के साथ काम कर रही है, हालांकि जब मैं क्वेरी चलाता हूं तो यह मुझे दिखाता है। डेटाबेस का उपयोग रूसियों द्वारा किया जाएगा और इसे रूसी पाठ को ठीक से दिखाना होगा!एसक्यूएल सर्वर 2012 एक्सप्रेस रूसी अक्षरों को समझ में नहीं आता

enter image description here

कोई भी विचार है कि यह कैसे तय करने के लिए? भविष्य में यह रूस में स्थित होगा और रूसी संस्करण एसक्यूएल सर्वर के साथ काम करेगा लेकिन अभी मैं अंग्रेजी संस्करण एसक्यूएल 2012 एक्सप्रेस पर काम कर रहा हूं।

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

क्या आपका कॉलम 'वर्कर' या 'nvarchar' है? – Gabe

उत्तर

16

क्या आप वाकई डेटा डेटाबेस सही ढंग में जमा किया गया हो:

यहाँ मेज और डालने बयान है? आपको कैसे मालूम?

सुनिश्चित करें कि कॉलम का उचित संयोजन है, इसे nvarchar के रूप में परिभाषित किया गया है और स्ट्रिंग अक्षर के आवेषण N के साथ पूर्वनिर्धारित हैं। उदाहरण के लिए, ये एक ही नहीं कर रहे हैं:

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; 

परिणाम:

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

और दिखाने के लिए कि यह कैसे अपने डालने बयान को प्रभावित करता है, अपने स्ट्रिंग नहीं है N उपसर्ग:

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

परिणाम:

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

तो, N'a prefix' या खो डेटा के साथ अपने यूनिकोड तार लगा दें।

+0

Thanx!ऐसा लगता है कि यह काम कर रहा है, तो क्या मुझे हर क्षेत्र में कोई भी टेक्स्ट डालने से पहले हर बार 'एन' का उपयोग करना होगा? – Andrey

+1

आपको इसे किसी भी कॉलम में यूनिकोड (nchar/nvarchar) में डालने की आवश्यकता है और जब स्ट्रिंग शाब्दिक में मूल ASCII वर्ण सेट के बाहर वर्ण हो सकते हैं। तो, संक्षेप में: हाँ। –

2

जबकि हारून बर्ट्रैंड ने एक अच्छा स्पष्टीकरण दिया, तो आपको ऐसा परिणाम क्यों मिल रहा है, मैं कहूंगा कि 'N' के साथ रूसी अक्षरों के साथ आपके सभी तारों को उपसर्ग न करने का कोई तरीका नहीं है।
जहां तक ​​मुझे पता है, आपने बस अपना सर्वर संयोजन सही ढंग से सेट किया है।

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

परिणाम:: तो अगर आप Cyrillic_General_CI_AS की तरह उदाहरण के लिए, अपने मिलान निर्धारित करते हैं,, सर्वर ठीक से रूसी पत्र के साथ varchar का इलाज कर सकता है

espanol ????? иван Cyrillic_General_CI_AS 

जैसा कि आप देख, स्पेनिश और जापानी तार ठीक से इलाज नहीं कर रहे हैं जबकि रूसी तार हैं। तो आप 'N'

के साथ तारों को उपसर्ग किए बिना nvarchar कॉलम में डेटा सम्मिलित कर सकते हैं, यह कहा गया है कि, मैं अपने डेटाबेस में डिफ़ॉल्ट स्ट्रिंग्स, संग्रहित प्रक्रियाओं में nvarchar पैरामीटर के रूप में nvarchar डेटा प्रकार का उपयोग कर रहा हूं। मैं कोड में रूसी तारों का बहुत ही कम उपयोग करता हूं (केवल तभी जब मैं कुछ परीक्षण करना चाहता हूं), और मैंने कभी भी N'string' वाक्यविन्यास का उपयोग नहीं किया है।

सही डिफ़ॉल्ट संयोजन होने के दौरान आसान हो सकता है, इस समाधान के साथ समस्या है - change default collation on installed SQL Server के लिए यह आसान नहीं है, इसलिए आपको SQL सर्वर इंस्टेंस स्थापित करते समय सावधान रहना होगा और कॉलेशन को ठीक से चुनना होगा।

+0

हालांकि यह आपको इस मामले में आलसी होने की अनुमति दे सकता है, समस्या यह है कि [सर्वर संयोजन को बदलना एक दर्द है] (http://technet.microsoft.com/en-us/library/ms179254.aspx) (और हो सकता है अन्य समस्याओं का कारण बनता है), और यूनिकोड स्ट्रिंग को उपसर्ग करने की आदत भी कहीं और समस्याओं का कारण बन सकती है - आपको हमेशा सर्वर संयोजन बदलने की जादुई क्षमता नहीं होगी। –

+0

@AaronBertrand हाँ, सर्वर कॉलेशन बदलना वास्तव में एक दर्द है, लेकिन यह जानकारी ओपी –

+0

के लिए उपयोगी हो सकती है, मुझे लगता है कि आपका उत्तर यह नहीं दर्शाता है कि बदलते सर्वर कोलेशन एन एन द्वारा उपसर्ग किए जाने वाले स्ट्रिंग्स को एन उपसर्ग जोड़ने से आसान है सर्वर संयोजन। या हो सकता है कि सर्वर संयोजन (और गॉथैस) को बदलने के सभी चरणों को शामिल करें। अभी ऐसा लगता है जैसे यह आसान है, और यह नहीं है। –

संबंधित मुद्दे