当前位置: 首页 > 知识库问答 >
问题:

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

和弘博
2023-03-14

如果您想在mysql/mariaDB中添加自定义排序规则,那么对于utf-8字符集,您可以修改/字符集/索引。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)与bulit-in归类utf8mb4_general_ci和一列(b)与我自己的归类utf8mb4_myown_ci(在ndex.xml中定义)。我在两列中插入相同的数据,在a列中没有错误,在b列中,我会得到如上所述的错误。

我在索引中创建了以下条目。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_myown_ci的列中,我还可以插入3字节字符,因此它似乎被解释为utf8排序规则。

我尝试谷歌多次,没有找到任何东西在这里,但我找不到任何提示,如何添加归类到字符,这是不存在的ndex.xml.

有什么办法吗?谢谢你的提示!

暂时还没有答案

 类似资料:
  • 3.4 运行规则分析 本节会给大家提供一个参考实例,用于告诉大家如何根据具体的业务实现自己的爬虫框架。 我们以公共规则中“阿里巴巴产品搜索”为例(这些公共的规则都在github.com/pholcus下面包含,大家可以参考下)。 package spider_lib // 基础包 import ( "github.com/PuerkitoBio/goquery"

  • 我正在使用外部数据库(只读)与本地数据库(测试系统)。 所以每次从外部数据库获取数据时,我都会得到如下异常警告,默认为空字符,如“”。 character_set_connection=latin1 character_set_database=utf8 character_set_filesystem=二进制 character_set_results=latin1 character_set_

  • 问题内容: 我可以阅读 MySQL 文档,这很清楚。但是,如何决定要使用哪个字符集?整理对哪些数据有影响? 我要求对两者以及如何选择它们进行解释。 问题答案: 从MySQL 文档: 甲 字符集 是一组符号和编码。甲 归类 为在一个字符集的字符进行比较的一组规则。让我们通过一个假想字符集的例子来清楚地区分。 假设我们有一个包含四个字母的字母:“ A”,“ B”,“ a”,“ b”。我们给每个字母一个

  • 我一直在MariaDB中使用大型和扩展数据库的数据库。数据库由PHP应用程序访问。 我将DB字符集和排序规则设置为utf8mb4和utf8mb4\u unicode\u ci 但并非所有的表都有text(varchar、text等)列。有些表只保存关系,因此所有列都是数字类型(int、bigint等)或日期/时间等。此外,不是文本类型。 在表中,我只保留数字,我是否需要保留Unicode多字节字符

  • 问题内容: 我使用Hibernate MySQLInnoDB方言生成DDL。 hibernate.cfg.xml: 如何为生成的表将字符集/排序规则配置为’utf8_general_ci’? 问题答案: 我之前有相同的要求,并使用了这篇文章,其中提供了详细的解决方案。您需要 继承MySQLInnoDBDialect的 子类,并重写 getTableTypeString 方法。本文中的更多内容。

  • 问题内容: 查看我的产品日志后,我提到了一些错误: Alghout我在cfg教义下拥有UTF-8默认值: 看来我所有的MySQL表都在其中,所以我的问题是: 我可以为所有表手动将排序规则更改为,而没有任何复杂性/注意事项吗? 问题答案: 了解以下定义会有所帮助: 甲 字符编码 信息的每个符号是如何以二进制表示(并因此存储在计算机)。例如,符号(U + 00E9,拉丁小字母E急性)被编码为在UTF-