RDS SQL SERVER 解決中文亂碼問題

2021-09-23 17:41:36 字數 1620 閱讀 1288

這天老鳥又開始糾纏著菜鳥:「菜鳥啊,我們最近遇到乙個rds sql server 2008 r2的奇怪的問題,我們的生僻字寫入到rds sql server中,查詢結果展示出來是亂碼呀?你去解決下這個問題吧。」。

「可是,鳥哥,我最近在做關於sqltest的系列文章啊,暫時抽不出。。。。。。」。

「那個暫時先放放,這個比較緊急,盡快,立刻,馬上去覆盤並解決掉,understand?」。還沒等菜鳥說完,老鳥已經迫不及待的發號施令了。

看到老鳥為這事著急上火的樣子,菜鳥已經意識到問題的嚴重性,於是放下手中的活,趕緊投入到這個問題的覆盤分析中來。

經過一番翻雲覆雨的研究後,菜鳥拿出了覆盤的例子來,參見下面的**:

use tempdb

goif object_id('#temp', 'u') is not null

drop table #temp

gocreate table #temp(

firstname varchar(10)

)insert into #temp

select '䅇'

union all

select '庫'

;select * from #temp

查詢結果如下圖所示:

從查詢結果展示來看,生僻字「䅇 (su)」 的確顯示為亂碼問號(?)。菜鳥終於覆盤了老鳥說得場景,但是他還是高興不起來。難道rds sql server 2008r2真如鳥哥所說,對生僻字不支援嗎?高階大氣上檔次的阿里雲rds sql server不至於吧?隨著研究的深入,菜鳥漸漸的找到問題的根本原因:

sql server是使用unicode編碼的資料型別來支援中文的,比如:nchar, nvarchar等資料型別,類似的語言還有拉丁語系,和包含中文在內的亞洲語言。所以,要解決這問題,我們的資料型別選擇就必須是unicode編碼的資料型別,很顯然覆盤例子中的資料型別varchar選擇錯誤,我們只需要將這個資料型別修改為nvarchar,即可解決問題了。

在正確分析了問題所在以後,解決問題就變得很簡單了,參見下面的測試**:

use tempdb

goif object_id('#temp', 'u') is not null

drop table #temp

gocreate table #temp(

firstname nvarchar(10)

)insert into #temp

select n'䅇'

union all

select n'庫'

;select * from #temp

測試結果展示

從結果展示來看,生僻字「䅇 (su)」已經可以成功展示出來了,這裡需要特別強調兩點,否則很有可能展示出來還是亂碼:

至此,菜鳥成功覆盤並解決了rds sql server 2008 r2遭遇生僻字亂碼的問題。又開始回過頭來繼續sqltest系列,革命尚未成功,同志還需努力。

RDS SQL SERVER 解決中文亂碼問題

這天老鳥又開始糾纏著菜鳥 菜鳥啊,我們最近遇到乙個rds sql server 2008 r2的奇怪的問題,我們的生僻字寫入到rds sql server中,查詢結果展示出來是亂碼呀?你去解決下這個問題吧。可是,鳥哥,我最近在做關於sqltest的系列文章啊,暫時抽不出。那個暫時先放放,這個比較緊急...

解決Pycharm中SystemError報錯

邏輯大致是,開啟執行緒,監聽kafka生產者push的topic訊息。問題出現在監聽過程中,執行緒在接收幾條topic之後出現報錯,不再處理資料exception ignored in traceback most recent call last file f pycharmprojects py...

解決servlet filter中if語句無效問題

今天寫 學習filter時,遇到了一件很奇怪的事情,就是當在jsp中同時提交檔案和乙個text元件時,servlet中的if語句無法返回true,如下 這是jsp 這是filter中的 if ps 1 如果這樣寫 的話,filter中的 永遠都不會返回true,也就無法執行其中的相應 而當改為 if...