本节讨论在MySQL中添加新字符集的程序。你必须有一个MySQL源码分发版。

要选择正确的程序,先确定字符集是简单字符集还是复杂字符集:

·         如果字符集不需要使用特殊字符串校对规则程序进行排序,并且不需要多字节字符支持,则为简单字符集。

·         如果需要上述某个特性,则为复杂字符集。

例如,latin1danish为简单字符集,而big5czech为复杂字符集。

在下面的程序中,字符集名用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.inCHARSETS_AVAILABLECOMPILED_CHARSETS列。

4.    重新配置、编译并测试。

对于复杂字符集,应:

1.    MySQL源码分发版中创建文件strings/ctype-MYSET.c

2.    sql/share/charsets/Index文件最后添加MYSET。并指定唯一的编号。

3.    看看已有的ctype-*.c文件(例如strings/ctype-big5.c),看看需要定义什么。请注意文件中的数组名必须为ctype_MYSETto_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_multiplymbmaxlen 行。只有需要字符串比较函数或多字节字符集函数时,才需要单独将它们包括进来。

13.然后你应创建下面的函数:

    • my_strncoll_MYSET()
    • my_strcoll_MYSET()
    • my_strxfrm_MYSET()
    • my_like_range_MYSET()

参见5.10.5节,“字符串比较支持”

14.将字符集名添加到configurE.inCHARSETS_AVAILABLECOMPILED_CHARSETS列。

15.重新配置、编译并测试。

sql/share/charsets/README文件中包括详细的说明。

如果你想要MySQL分发中的字符集,请向MySQL内部邮件系统发邮件。参见1.7.1.1节,“The MySQL邮件列表”