sqlserver的字符集配置

2021-07-05 19:59:38 字數 1585 閱讀 3223

記錄一點資料庫的知識

背景:

1.echo命令可以將內容直接寫到文字中,格式為:

echo [content] > [filepath]

2.sqlserver提供了xp_cmdshell 可以直接呼叫外部shell,具體原理沒看,但是要先啟用這個功能

exec sp_configure 'xp_cmdshell', 1
,現在問題來了,用這種方式匯出的時候會出現編碼問題,出現亂碼。

xp_cmdshell 'echo 我們的》c:\study\test.txt'

問題解決:

1. sqlserver支援多語言的,在management studio建立資料庫時候點options-->collation,中文選擇"chinese_prc_ci_as",英文預設為sql_latin1_general_cp1_ci_as,俄文為cyrillic_general_ci_as。如果在英文資料庫表中儲存中文,則查詢結果是問號。

2.可以在插入時使用n'中文'的方式插入,則可以顯示中文

3.nvarchar型別是按照乙個字元兩位元組方式儲存的

4.在儲存過程中定義變數時,使用nvarchar,可以解決亂碼問題,如declare name nvarchar(32).當然,如果這些變數依賴了表中查詢的資料,那麼對應的那個資料應當和這個資料庫的字符集相應。比如想從俄文字符集裡面搞出中文來,即使放到nvarchar裡面貌似也是不行的。

這些記錄一下,有些可能還不透徹,甚至有問題,不過解決了當前問題。

英文系統下使用

xp_cmdshell 'chcp 65001|echo 我們的》c:\study\test.txt'

發現沒起作用,發現和系統語言有很大關係,待研究補充

-------------------2014.11.11補充---------------

擦,剛打了一段,不小心按了esc全沒了  日日  撤銷也搞不回來

簡單說吧:

echo輸出其他語言到文字只能是ansi編碼,但是可以使用chcp改變活動**頁(氣氛上是字符集):

簡裝的win7英文系統沒中文字元,需要下補丁。在cmd裡面如果敲chcp 936會報錯

另外chcp65001 發現在儲存過程裡面調的時候還是會出現一點亂碼,這個原因也沒搞懂,如果輸出量比較少,就沒問題,生成的檔案也是ansi-utf-8編碼的。

可以在控制面板--區域和語言--管理--更改系統區域設定 裡面設定語言(非當前系統語言)

只要cmd裡面能顯示字元正常,就能把這些字元正常的輸出到檔案裡面,但是因為是ansi編碼的,所以在其他系統可能要用notepad++的encoding--character set--選擇字符集,如果是俄文的話可以選擇cyrillic--oem 866即可。

看其他帖子的忠告是

1.不要使用notepad(記事本),坑爹貨

2.windows後來的powershell功能比較強大,提供了生成utf-8編碼文字的一些工具(這個我沒具體試)

3.和系統相關的編碼問題太搞,畢竟不是windows大濕,如果sql儲存過程遇到什麼問題,就在使用文件或者注釋裡面加內容吧。

SYBASE字符集的配置

一 修改客戶端字符集 檢視 sybase locales locales.dat sybase locales locales.dat 找到對應作業系統下的字符集配置,如windows nt locale enu,us english,iso 1 locale fra,french,iso 1 lo...

更改SQLServer例項預設字符集

今天同事的新安裝的sql server 2008 r2 寫入中文亂碼,發現是排序 的問題 通過修改字符集,可以寫入中文,但是varchar型別的還是亂碼,修改資料庫字符集 alter database dbname collate chinese prc ci as 最後只能使用重建master庫來...

mysql api 字符集 MySQL字符集

mysql字符集包括字符集 character 和 collation 兩個概念。字符集是用來定義mysql儲存字串的規則,校對規則則是定義了比較字串的方式。字串和校對規則是一對多的 關係。使用命令 show collation like gbk 可檢視相關的校對規則 使用 show charact...