将排序规则添加到utf8mb4字符集 - MySQL / MariaDB

时间:2018-04-19 21:46:45

标签: mysql mariadb collation utf8mb4

如果要在mysql / mariaDB中添加自定义排序规则,对于utf-8字符集,您可以修改... / charsets / Index.xml并使用LDML语法扩展字符集:

<charset name="utf8">
  ...
  <collation name="utf8_myown_ci" id="1234">
    <rules>
      <reset>\u0000</reset>
        <i>\u0020</i> <!-- space -->
        ...
    </rules>
  </collation>
  ...
</charset>

但是没有charset-tag的名字&#34; utf8mb4&#34;。所以我创建了一个名为=&#34; utf8mb4&#34;并添加了排序规则/规则标签,在phpmyadmin中,我可以选择新创建的排序规则。但我无法插入四个字节的字符;我收到了错误

"#1366 - Incorrect string value: '\xF0\x9F\x8D\xB5\xF0\x9F...' for field ..."

(使用mb4-collat​​ion构建我可以做到。)

更确切地说:我有一列(a)带有bulit-in collat​​ion utf8mb4_general_ci和一列(b)带有我自己的排序规则utf8mb4_myown_ci(在Index.xml中定义)。我在两列和列中插入相同的数据,没有错误,在列b中我会得到如上所述的错误。

我在Index.xml中创建了以下条目:

<charset name="utf8mb4">
  <family>Unicode</family>
  <description>UTF-8 MB4 Unicode</description>
  <collation name="utf8mb4_general_ci" id="45">
    <flag>primary</flag>
    <flag>compiled</flag>
  </collation>
  <collation name="utf8mb4_bin"     id="46">
    <flag>binary</flag>
    <flag>compiled</flag>
  </collation>
  <collation name="utf8mb4_myown_ci"  id="213">
  </collation>
</charset>

将collat​​ion-tag设置为空是没有问题的,因为我在charset =&#34; utf-8&#34;内创建了一个空的utf8_myown_ci。这很有效。

在使用utf8mb4_myown_ci的列中,我还可以插入3个字节字符,因此它似乎被解释为utf8排序规则。

我多次尝试google并且在这里找不到任何内容,但我找不到任何提示,如何将字符串添加到字符集中,而这些字符串在Index.xml中并不存在。

任何想法怎么做?谢谢你的任何提示!

2 个答案:

答案 0 :(得分:0)

听起来你没有为连接建立utf8mb4

有关更多问题排查:Trouble with UTF-8 characters; what I see is not what I stored

答案 1 :(得分:0)

原来,我使用了一个被占用的校对ID。如果我使用例如501而不是213,它有效。