解決使用SQLServer2008R2的“sp_send_dbmail”發郵件,當郵件標題、內容中有中文時就會變成“?”的問題

問題:使用SQLServer2008R2的“sp_send_dbmail”發郵件,當郵件標題、內容中有中文時就會變成“?”

分析: 經過分析是因爲安裝數據庫的排序規則SQL_Latin1_General_CP1_CI_AS”導致的。

需求:安裝數據庫時,將字符集安裝成了“SQL_Latin1_General_CP1_CI_AS”,現在需要將其更改爲“Chinese_PRC_CI_AS”。

        提示:使用下列腳本可以查詢到當前數據庫的排序規則(注意:排序規則在安裝數據庫時是可以選擇的,大家常常會忽略。)

        

方法:重新生成系統數據庫 ,然後還原配置信息。

        提示:這種方法是有侷限性的,重新生成 master、model、msdb 和 tempdb 系統數據庫時,將刪除這些數據庫,然後在其原位置重新創建。 如果在重新生成語句中指定了新排序規則,則將使用該排序規則設置創建系統數據庫。 用戶對這些數據庫所做的所有修改都會丟失。 例如,您在 master 數據庫中的用戶定義對象、在 msdb 中的預定作業或在 model 數據庫中對默認數據庫設置的更改都會丟失。

-----------------------------------------------------------------------------------

前期準備

          提示:如沒有重要配置信息可以略過前期準備,如之前配置過了數據庫郵件配置,則可以在重新生成系統數據庫後再重新配置。

在重新生成系統數據庫之前執行下列任務,以確保可以將系統數據庫還原至它們的當前設置。

  1. 記錄所有服務器範圍的配置值。
    SELECT * FROM sys.configurations;
  2. 記錄所有應用到 SQL Server 實例和當前排序規則的 Service Pack 和修補程序。 重新生成系統數據庫後必須重新應用這些更新。
    SELECT
    SERVERPROPERTY('ProductVersion ') AS ProductVersion,
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
    SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
    SERVERPROPERTY('Collation') AS Collation;
  1. 記錄系統數據庫的所有數據文件和日誌文件的當前位置。 重新生成系統數據庫會將所有系統數據庫安裝到其原位置。 如果已將系統數據庫數據文件或日誌文件移動到其他位置,則必須再次移動這些文件。
    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
  1. 如果將 SQL Server 的實例配置爲複製分發服務器,請找到該分發數據庫的當前備份。
  2. 確保您有重新生成系統數據庫的相應權限。 必須是 sysadmin 固定服務器角色的成員才能執行此操作。 有關詳細信息,請參閱服務器級別角色
  1. 將原數據庫的帳號、JOB等與系統數據庫相關的信息全部備份起來(可以先生成相應的腳本),分離掉所有用戶庫。
-----------------------------------------------------------------------------------
操作方法:

Step1、先解壓好SQLServer的安裝文件,如:解壓在D盤的“SQL Server 2008R2 x86 x64”文件夾下;

Step2、開始-->運行輸入“CMD”進入CMD模式,在命令行下進入SQL Server 安裝文件所在目錄(setup.exe文件所在目錄,即SQL Server 2008R2 x86 x64”目錄下

Step3、運行命令:Net stop mssqlserver  關閉mssqlserver服務,當提示成功後執行下一步;

Step4、執行如下命令:Setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver /SQLSYSADMINACCOUNTS=administrator /sapwd=XXXXXX /sqlcollation=Chinese_PRC_CI_AS 

提示:Step4執行的時間可能會有一些長,只要不報錯,請安靜等待命令行提示符出現,此時說明已經執行成功了;

參數說明:

參數名稱

說明

/QUIET 或 /Q

指定在沒有任何用戶界面的情況下運行安裝程序。

/ACTION=REBUILDDATABASE

指定安裝程序將重新創建系統數據庫。

/INSTANCENAME=InstanceName

SQL Server 實例的名稱。 對於默認實例,請輸入 MSSQLSERVER

/SQLSYSADMINACCOUNTS=accounts

指當前操作系統的管理員賬號

指定要添加到 sysadmin 固定服務器角色中的 Windows 組或單個帳戶。 指定多個帳戶時,請用空格將帳戶隔開。 例如,請輸入 BUILTIN\Administrators MyDomain\MyUser 當您在帳戶名稱內指定包含空格的帳戶時,用雙引號將該帳戶引起來。 例如,輸入 NT AUTHORITY\SYSTEM

[ /SAPWD=StrongPassword ]

指定 SQL Server sa 帳戶的密碼。 如果實例使用混合身份驗證(SQL Server  Windows 身份驗證)模式,則此參數是必需的。

安全說明

sa 帳戶是一個廣爲人知的 SQL Server 帳戶,並且經常成爲惡意用戶的攻擊目標。 因此,爲 sa 登錄名使用強密碼非常重要。

不要爲 Windows 身份驗證模式指定此參數。

[ /SQLCOLLATION=CollationName ]

指定新服務器級排序規則。 此參數可選。 如果沒有指定,則使用服務器的當前排序規則。

重要提示

更改服務器級排序規則不會更改現有用戶數據庫的排序規則。 默認情況下,所有新創建的用戶數據庫都將使用新排序規則。

有關詳細信息,請參閱設置或更改服務器排序規則

 

Step5、運行命令:Net start mssqlserver 開啓mssqlserver服務,當提示成功後完成操作,即可執行下一步進行驗證。

Step6、執行如下腳本查看collation列是否已經被修改爲“Chinese_PRC_CI_AS”。

Step7、重新配置數據庫郵件配置。

Step8、如使用下圖中的腳本發送測試郵件。

    


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章