mysql/mariadb

btxsgosb  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(438)

如果要在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中没有的字符集添加排序规则。
你知道怎么做吗?谢谢你的提示!

nfg76nw0

nfg76nw01#

结果,我使用了一个占用的排序规则id。如果我使用例如501而不是213,它就可以工作了。

kpbpu008

kpbpu0082#

听起来你还没有确定 utf8mb4 为了连接。
?
更多故障排除:utf-8字符故障;我看到的不是我储存的

相关问题