本节讨论在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个字。
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.然后你应创建下面的函数:
14.将字符集名添加到configurE.in的CHARSETS_AVAILABLE和COMPILED_CHARSETS列。
15.重新配置、编译并测试。
sql/share/charsets/README文件中包括详细的说明。
如果你想要MySQL分发中的字符集,请向MySQL内部邮件系统发邮件。参见1.7.1.1节,“The MySQL邮件列表”。