問題背景
- 新安裝 Sybase ASE,默認字符集 `cp850` (西歐語系)。
- 應用寫入中文,讀取顯示亂碼。
- 需設置字符集為 `CP936` (簡體中文 GBK 超集)。
步驟 1:安裝 CP936 字符集到系統表
cd %SYBASE%\charsets\cp936
charset -Usa -Psa_password -Sserver_name binary.srt cp936
- `binary.srt`:排序順序定義文件。
- 執行後**必須重啟 Sybase 服務兩次**才生效 (首次載入,二次確認)。
步驟 2:驗證安裝並設置默認字符集
-- 查看 syscharsets 表
SELECT id, csname, description FROM master..syscharsets WHERE csname = 'cp936';
-- 返回 id=171 (示例)
在 **Sybase Central** 或配置文件中設置 **默認字符集 ID = 171** (對應 cp936)。

步驟 3:master 數據庫表空間擴容 (關鍵避坑)
**現象:** 設置字符集後重啟報錯,或 `charset` 命令失敗。
**原因:** `master` 數據庫默認表空間極小 (數百 KB),載入新字符集定義數據導致空間不足。
**解決:**
- Sybase Central → `master` 數據庫右鍵 → Properties → Space 頁籤。
- 編輯現有設備,擴大 `master` 表空間分配 (建議 ≥ 50MB)。
- 或新增設備專供 `master` 使用。
- 重啟服務驗證。
步驟 4:重新執行初始化腳本 (數據層面修正)
**現象:** 字符集已生效,但應用讀取舊數據仍亂碼。
**原因:** 舊數據按 `cp850` 編碼存儲,新連接按 `cp936` 解碼 → 二進制不匹配。
**解決:** 在 `cp936` 環境下**重新執行所有建表/導數據腳本**,將正確編碼的數據寫入。
驗證清單
- `SELECT @@charset` 返回 `cp936`。
- `sp_helpsort` 顯示排序順序為 `cp936` 相關。
- 應用插入中文 → 查詢顯示正常。
- 客戶端工具 (isql, Aqua Data Studio) 設置字符集為 CP936/GBK 顯示正常。
遷移建議
- 新項目**優先選擇 UTF-8 (Sybase 15.7+ 支持 Unicode)**,避免代碼頁轉換地獄。
- 現有系統若無法遷移,文檔化字符集設置流程,納入部署腳本自動化。