• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 字符定义数组

    每个简单字符集在sql/share/charsets目录中都有一个配置文件。对于名为的字符集MYSYS,文件名为MYSET.xml。它使用<map>数组元素列出字符集属性。<map>元素出现在以下元素中:

    • <ctype>定义每个字符的属性。
    • <lower><upper>列出小写和大写字符。
    • <unicode>将8位字符值映射到Unicode值。
    • <collation>元素表示用于比较和校验的字符顺序,每个校验规则一个元素。二进制校验规则不需要任何<map>元素,因为字符代码本身提供了校验。

    对于在目录中的文件中实现的复杂字符集,有相应的数组:,等。并非每个复杂的字符集都具有所有数组。有关示例,另请参阅现有文件。有关其他信息,请参见目录中的文件。ctype-MYSET.cstringsctype_MYSET[]to_lower_MYSET[]ctype-*.cCHARSET_INFO.txtstrings

    大多数数组都由字符值索引,并具有256个元素。该<ctype>数组由字符值 +1索引,并具有257个元素。这是处理的传统约定EOF

    <ctype>数组元素是位值。每个元素都描述字符集中单个字符的属性。每个属性都与一个位掩码相关联,如include/m_ctype.h

    #define _MY_U   01      /* Upper case */
    #define _MY_L   02      /* Lower case */
    #define _MY_NMR 04      /* Numeral (digit) */
    #define _MY_SPC 010     /* Spacing character */
    #define _MY_PNT 020     /* Punctuation */
    #define _MY_CTR 040     /* Control character */
    #define _MY_B   0100    /* Blank */
    #define _MY_X   0200    /* heXadecimal digit */
    

    <ctype>给定字符的值应为描述该字符的适用位掩码值的并集。例如,'A'是一个大写字符(_MY_U)以及一个十六进制数字(_MY_X),因此ctype应按以下方式定义其值:

    ctype['A'	+1] = _MY_U | _MY_X = 01 | 0200 = 0201
    

    中的位掩码值m_ctype.h是八进制值,但其中的<ctype>数组元素MYSET.xml应写为十六进制值。

    <lower><upper>阵列保持小写和对应于所述字符集的每个成员大写字符。例如:

    lower['A'] should contain 'a'
    upper['a'] should contain 'A'
    

    每个<collation>数组指示字符如何校验以进行比较和校验。MySQL根据此信息的值对字符进行校验。在某些情况下,它与<upper>数组相同,这意味着校验不区分大小写。有关更复杂的校验规则(针对复杂字符集),请参见“对复杂字符集的字符串校验支持”中有关字符串校验的讨论。