2015-09-02 69 views
1

當用戶在數據庫中插入像'пример'這樣的俄語單詞時,數據庫將其保存爲'??????'。如果他們插入'N'字母或我選擇'N'字母,即; exec Table_Name N'yherenations''沒有問題。但是我不想在每個查詢中使用'N',那麼是否有解決方案?順便說一下,我將使用存儲過程。在SQL中選擇西里爾字符

UPDATE:

現在我可以用俄文字母用alter整理。但是我無法改變每種語言的排序規則,我只是想了解在添加文本之後,文本前面是否有自動添加N的觸發器或函數。 IE瀏覽器;當我插入'пример'時,SQL應該像自動化地使用N'пример一樣。

+3

保留列數據類型爲NVARCHAR而不是VARCHAR –

+1

這是什麼意思,你不想在每個查詢中使用'N'text''?這是指定字符串文字是Unicode的方式......如果您有參數化查詢,請將變量聲明爲「NVARCHAR」(如@PareshJ所示),這將解決您的問題。 –

+1

我知道,我已經使用NVARHAR,但這不是一個解決方案。我仍然得到'?????'對於非英文字符。 –

回答

2

您必須使用列的數據類型NVARCHAR來插入unicode字母,否則在插入時必須使用N'value'。正如你所看到的數據類型varchar的列返回questionmarks ??????和數據類型nvarchar返回俄語字符иытание

CREATE TABLE #test 
(
    varcharCol varchar(40), 
    nvarcharCol nvarchar(40) 
) 
INSERT INTO #test VALUES ('иытание','иытание') 

SELECT * FROM #test 

輸出

varcharCol nvarcharCol 
???????  иытание 

您可以在下面的測試吧。


UPDATE

問題是,你的數據庫排序規則不支持俄語字母。

  1. 在對象資源管理器中,連接到SQL Server數據庫引擎的實例,展開該實例,然後展開數據庫。
  2. 用鼠標右鍵單擊所需的數據庫,然後單擊屬性。
  3. 單擊選項頁面,然後從排序規則 下拉列表中選擇排序規則。
  4. 完成後,單擊確定。

MORE INFO

+0

我知道,我已經在搜索解決方案並找到了這些示例,但是當我在SQL Server上運行這些代碼時,我得到'?????'爲每個這些代碼。所以我認爲也許問題是SQL Server本身? –

+0

我剛剛在SQL-Server 2008上測試過它,它工作正常。我提供了我測試過的OUTPUT。提供您的查詢。 –

+0

我嘗試了與你寫的完全相同的代碼,但是我得到'?????' nvarchar和varchar。我不明白問題在哪裏。 –

1

它會很難把在評論,我會從varchar推薦此鏈接Info

declare @test TABLE 
(
    Col1 varchar(40), 
    Col2 varchar(40), 
    Col3 nvarchar(40), 
    Col4 nvarchar(40) 
) 
INSERT INTO @test VALUES 
('иытание',N'иытание','иытание',N'иытание') 

SELECT * FROM @test 

結果

enter image description here

0

更改類型的列(含俄羅斯)的到nvarchar。