本节讨论向MySQL添加字符集的过程。正确的过程取决于字符集是简单还是复杂:
如果字符集不需要特殊的字符串排序例程,也不需要多字节字符支持,那么它很简单。
如果字符集需要这些特性中的任何一个,那么它就很复杂。
例如,希腊
而且swe7
简单字符集,而繁体
而且捷克
是复杂的字符集。
要使用下面的说明,您必须有一个MySQL源代码发行版。在说明中,MYSET
表示要添加的字符集的名称。
添加一个
<字符集>
元素MYSET
到sql /分享/数据集,但预览时教程/
文件。使用文件中的现有内容作为添加新内容的指南。的部分清单latin1
<字符集>
元素:Western cp1252 West europe …<整理名="latin1_swedish_ci" id="8" order="芬兰语,瑞典语">primary compiled <整理名="latin1_danish_ci" id="15" order="丹麦语"/>…Binary compiled 的
<字符集>
元素必须列出字符集的所有排序规则。这些排序规则必须至少包括一个二进制排序规则和一个默认(主)排序规则。默认排序规则通常使用后缀的命名general_ci
(一般不区分大小写)。二进制排序规则可能是默认排序规则,但通常它们是不同的。默认排序规则应该有主要的
国旗。二进制排序规则应该有二进制
国旗。必须为每个排序规则分配唯一的ID号。1024 ~ 2047的id范围为用户定义的排序规则保留。要查找当前使用的排序规则id的最大值,使用以下查询:
Select max (id) from information_schema.collations;
这一步取决于您添加的是简单字符集还是复杂字符集。简单字符集只需要配置文件,而复杂字符集则需要定义排序函数、多字节函数或两者兼有的C源文件。
对于简单的字符集,创建一个配置文件,
,描述字符集属性。中创建此文件MYSET
. xmlsql /分享/数据集
目录中。您可以使用的副本latin1.xml
作为这个文件的基础。该文件的语法非常简单:注释被写成普通的XML注释(
<!--
).文本
-->单词在
< >地图
数组元素由任意数量的空格分隔。里面的每个词
< >地图
数组元素必须是十六进制格式的数字。的
< >地图
数组元素的< ctype >
Element有257个单词。另一个< >地图
之后的数组元素有256个单词。看到第10.13.1节“字符定义数组”.中列出的每个排序规则
<字符集>
元素的字符集Index.xml
,
必须包含MYSET
. xml<排序>
元素,它定义字符顺序。
对于复杂的字符集,创建一个C源文件,描述字符集属性,并定义正确执行字符集操作所需的支持例程:
创建文件
ctype -
在MYSET
.c字符串
目录中。看看其中一个现存的ctype - * . c
文件(例如ctype-big5.c
),查看需要定义的内容。文件中的数组必须具有如下名称ctype_
,MYSET
to_lower_
等等。这些对应于一个简单字符集的数组。看到第10.13.1节“字符定义数组”.MYSET
为每一个
<排序>
元素中列出的<字符集>
元素的字符集Index.xml
,ctype -
文件必须提供排序规则的实现。MYSET
.c如果字符集需要字符串排序函数,请参见第10.13.2节,“复杂字符集的字符串排序支持”.
如果字符集需要多字节字符支持,请参见章节10.13.3,“复杂字符集的多字节字符支持”.
修改配置信息。使用现有的配置信息作为添加信息的指南
MYSYS
.这里的示例假设字符集具有默认和二进制排序规则,但是如果MYSET
具有额外的排序规则。编辑
mysys / charset-def.c
,”注册”新字符集的排序规则。将这些行添加到”宣言”部分:
# ifdef HAVE_CHARSET_MYSETextern CHARSET_INFO my_charset_MYSET_general_ci;extern CHARSET_INFO my_charset_MYSET_bin;# endif
将这些行添加到”登记”部分:
# ifdef HAVE_CHARSET_MYSETadd_compiled_collation (&my_charset_MYSET_general_ci);add_compiled_collation (&my_charset_MYSET_bin);# endif
如果字符集使用
ctype -
、编辑MYSET
.c字符串/ CMakeLists.txt
并添加ctype -
对的定义MYSET
.cSTRINGS_SOURCES
变量。编辑
cmake / character_sets.cmake
:添加
MYSET
与的价值CHARSETS_AVAILABLE
按字母顺序排列。添加
MYSET
的价值CHARSETS_COMPLEX
按字母顺序排列。即使对于简单的字符集,这也是需要的,因此CMake可以识别-DDEFAULT_CHARSET =
.MYSET
重新配置、重新编译和测试。