本節討論在MySQL中添加新字符集的程序。你必須有一個MySQL源碼分發版。
要選擇正確的程序,先確定字符集是簡單字符集還是復雜字符集:
· 如果字符集不需要使用特殊字符串校對規則程序進行排序,并且不需要多字節字符支持,則為簡單字符集。
· 如果需要上述某個特性,則為復雜字符集。
例如,latin1和danish為簡單字符集,而big5和czech為復雜字符集。
在下面的程序中,字符集名用MYSET表示。
對于簡單字符集,應:
1. 在sql/share/charsets/Index文件最后添加MYSET。并指定唯一的編號。
2. 創建文件sql/share/charsets/MYSET.conf。(你可以使用sql/share/charsets/latin1.conf的備份文件作為該文件的基礎)。
該文件的語法很簡單:
· 注釋從‘#’字符開始,一直到該行末尾。
· 各字之間用任意數量的空格間隔開。
· 定義字符集時,每個字必須為十六進制格式的數字。
· ctype數組占據前257個字。to_lower[]、to_upper[]和sort_order[]數組依次占據256個字。
參見5.10.4節,“字符定義數組”。
3. 將字符集名添加到configurE.in的CHARSETS_AVAILABLE和COMPILED_CHARSETS列。
4. 重新配置、編譯并測試。
對于復雜字符集,應:
1. 在MySQL源碼分發版中創建文件strings/ctype-MYSET.c。
2. 在sql/share/charsets/Index文件最后添加MYSET。并指定唯一的編號。
3. 看看已有的ctype-*.c文件(例如strings/ctype-big5.c),看看需要定義什么。請注意文件中的數組名必須為ctype_MYSET、to_lower_MYSET等等。對應簡單字符集的數組。參見5.10.4節,“字符定義數組”。
4. 在文件頂部,添加注釋:
5. /*
6. * This comment is parsed by configure to create ctype.c,
7. * so don't change it unless you know what you are doing.
8. *
9. * .configure. number_MYSET=MYNUMBER
10. * .configure. strxfrm_multiply_MYSET=N
11. * .configure. mbmaxlen_MYSET=N
12. */
configure程序使用該注釋自動將字符集包括進MySQL庫中。
在下面章節中解釋strxfrm_multiply和mbmaxlen 行。只有需要字符串比較函數或多字節字符集函數時,才需要單獨將它們包括進來。
13.然后你應創建下面的函數:
- my_strncoll_MYSET()
- my_strcoll_MYSET()
- my_strxfrm_MYSET()
- my_like_range_MYSET()
參見5.10.5節,“字符串比較支持”
14.將字符集名添加到configurE.in的CHARSETS_AVAILABLE和COMPILED_CHARSETS列。
15.重新配置、編譯并測試。
sql/share/charsets/README文件中包括詳細的說明。
如果你想要MySQL分發中的字符集,請向MySQL內部郵件系統發郵件。參見1.7.1.1節,“The MySQL郵件列表”。