RDSSQLSERVER解決中文亂碼問題
問題引入
這天老鳥又開始糾纏著菜鳥:“菜鳥啊,我們最近遇到一個RDS SQL Server 2008 R2的奇怪的問題,我們的生僻字寫入到RDS SQL Server中,查詢結果展示出來是亂碼呀?你去解決下這個問題吧。”。
“可是,鳥哥,我最近在做關於SQLTest的系列文章啊,暫時抽不出。。。。。。”。
“那個暫時先放放,這個比較緊急,儘快,立刻,馬上去覆盤並解決掉,Understand?”。還沒等菜鳥說完,老鳥已經迫不及待的發號施令了。
覆盤分析
看到老鳥為這事著急上火的樣子,菜鳥已經意識到問題的嚴重性,於是放下手中的活,趕緊投入到這個問題的覆盤分析中來。
覆盤
經過一番翻雲覆雨的研究後,菜鳥拿出了覆盤的例子來,參見下面的程式碼:
use tempdb
go
IF OBJECT_ID(`#temp`, `U`) IS NOT NULL
DROP TABLE #temp
GO
create 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
go
IF OBJECT_ID(`#temp`, `U`) IS NOT NULL
DROP TABLE #temp
GO
create table #temp(
firstName nvarchar(10)
)
insert into #temp
select N`䅇`
union all
select N`庫`
;
select * from #temp
測試結果展示
從結果展示來看,生僻字“䅇 (su)”已經可以成功展示出來了,這裡需要特別強調兩點,否則很有可能展示出來還是亂碼:
- 資料型別選擇請務必使用Unicode編碼格式的型別,這裡選擇的是NVARCHAR。
- 在向Unicode編碼格式的資料型別插入資料時,需要使用前置詞N。N前置詞代表的是 SQL-92標淮中的國家語言,且N必須為大寫。如果您沒有在Unicode字串常數前面加上N做為前置詞,則SQL Server會在使用字串前,先將其轉換成目前資料庫的非Unicode 字碼頁。
寫在最後
至此,菜鳥成功覆盤並解決了RDS SQL Server 2008 R2遭遇生僻字亂碼的問題。又開始回過頭來繼續SQLTest系列,革命尚未成功,同志還需努力。
相關文章
- 解決中文亂碼問題
- springmvc 解決中文亂碼問題SpringMVC
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- js解決url中文亂碼問題JS
- 解決plsql中中文亂碼問題SQL
- phantomjs截圖中文亂碼問題解決JS
- 雲伺服器中文亂碼問題解決伺服器
- 解決Url帶中文引數亂碼問題
- Sublime Text 3 中文亂碼問題的解決
- python json.dumps中文亂碼問題解決PythonJSON
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- 完美解決jspdf各種中文亂碼問題JS
- 解決zabbix圖形化中文亂碼問題
- LiveCharts中文顯示亂碼問題的解決Echarts
- 解決Eclipse中文註釋部分亂碼的問題Eclipse
- URL地址中的中文亂碼問題的解決
- Mysql中文亂碼問題的最佳解決方法MySql
- 解決PHP匯出CSV檔案中文亂碼問題PHP
- IDEA裡Tomcat Console日誌中文亂碼問題解決IdeaTomcat
- 如何解決PuTTY中文亂碼的問題
- mysql5.7.22設定中文編碼-解決亂碼問題LinuxMySqlLinux
- vscode中文亂碼問題VSCode
- EasyUI 中文亂碼問題UI
- 解決ajax get post方式提交中文引數亂碼問題
- linux 安裝字型解決JAVA圖形中文亂碼問題LinuxJava
- 常見php與mysql中文亂碼問題解決辦法PHPMySql
- whisper v3 finetune 中文亂碼問題的解決方案
- MySQL解決中文亂碼MySql
- python爬蟲爬取網頁中文亂碼問題的解決Python爬蟲網頁
- 解決tomcat啟動控制檯輸出中文亂碼問題-ideaTomcatIdea
- Python BeautifulSoup中文亂碼問題Python
- SSM解決中文存入資料庫亂碼問題(記錄自己的問題)SSM資料庫
- 解決Kali Linux 2020.1亂碼問題Linux
- TongWeb下亂碼問題解決思路Web
- java中亂碼問題解決方法Java
- cat 輸出亂碼問題解決
- ROS中解決中文亂碼ROS
- request/response解決中文亂碼