将排序规则添加到 utf8mb4 字符集 - MySQL/MariaDB
Adding collation to utf8mb4 charset - MySQL/MariaDB
如果您想在 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>
但是没有名称为 "utf8mb4" 的字符集标签。所以我创建了一个 name="utf8mb4" 并添加了 collation/rules 标签,在 phpmyadmin 中我可以选择新创建的排序规则。但是我不能插入四个字节的字符;我收到错误
"#1366 - Incorrect string value: '\xF0\x9F\x8D\xB5\xF0\x9F...' for field ..."
(使用内置的 mb4-collation 我可以做到)。
更准确地说:我有一列 (a) 带有内置排序规则 utf8mb4_general_ci,一列 (b) 带有我自己的排序规则 utf8mb4_myown_ci(在 [=38= 中定义) ]).我在两列中插入相同的数据,在 a 列中没有错误,在 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>
collation-tag 为空似乎没有问题,因为我在 charset="utf-8" 中创建了一个空的 utf8_myown_ci 并且这有效。
在utf8mb4_myown_ci的列中我也可以插入3个字节的字符,所以它似乎被解释为一个utf8排序规则。
我尝试了 google 多次,在这里没有找到任何东西,但我找不到任何提示,如何向字符集添加排序规则,这些在 Index.xml 中不存在。
有什么办法吗?感谢您的任何提示!
听起来你没有建立 utf8mb4
连接。
更多疑难解答:
事实证明,我使用了一个占用的排序规则 ID。如果我使用例如501 而不是 213,它有效。
如果您想在 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>
但是没有名称为 "utf8mb4" 的字符集标签。所以我创建了一个 name="utf8mb4" 并添加了 collation/rules 标签,在 phpmyadmin 中我可以选择新创建的排序规则。但是我不能插入四个字节的字符;我收到错误
"#1366 - Incorrect string value: '\xF0\x9F\x8D\xB5\xF0\x9F...' for field ..."
(使用内置的 mb4-collation 我可以做到)。
更准确地说:我有一列 (a) 带有内置排序规则 utf8mb4_general_ci,一列 (b) 带有我自己的排序规则 utf8mb4_myown_ci(在 [=38= 中定义) ]).我在两列中插入相同的数据,在 a 列中没有错误,在 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>
collation-tag 为空似乎没有问题,因为我在 charset="utf-8" 中创建了一个空的 utf8_myown_ci 并且这有效。
在utf8mb4_myown_ci的列中我也可以插入3个字节的字符,所以它似乎被解释为一个utf8排序规则。
我尝试了 google 多次,在这里没有找到任何东西,但我找不到任何提示,如何向字符集添加排序规则,这些在 Index.xml 中不存在。
有什么办法吗?感谢您的任何提示!
听起来你没有建立 utf8mb4
连接。
更多疑难解答:
事实证明,我使用了一个占用的排序规则 ID。如果我使用例如501 而不是 213,它有效。