如果要在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”并添加了排序规则/规则标记,在phpmyadmin中,我可以选择新创建的排序规则。但我不能插入四字节字符;我得到了错误
"#1366 - Incorrect string value: '\xF0\x9F\x8D\xB5\xF0\x9F...' for field ..."
(有了内置的mb4排序规则,我就可以做到了)。
更准确地说:我有一列(a)和一列(b)和我自己的排序规则utf8mb4\u myown\u ci(在index.xml中定义)。我在两列中插入相同的数据,在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>
将排序规则标记设为空似乎没有问题,因为我在charset=“utf-8”内创建了一个空的utf8\u myown\u ci,这样就可以了。
在带有utf8mb4\u myown\u ci的列中,我还可以插入3字节字符,因此它似乎被解释为utf8排序规则。
我尝试了多次google,但在这里没有找到任何东西,但是我找不到任何提示,即如何向index.xml中没有的字符集添加排序规则。
你知道怎么做吗?谢谢你的提示!
2条答案
按热度按时间nfg76nw01#
结果,我使用了一个占用的排序规则id。如果我使用例如501而不是213,它就可以工作了。
kpbpu0082#
听起来你还没有确定
utf8mb4
为了连接。?
更多故障排除:utf-8字符故障;我看到的不是我储存的