如何在MariaDB中更改字符集

gajydyqb  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(210)

我想在MariaDB全文搜索中包含#符号作为有效的单词字符,这样我就可以用它来表示标签并使它们可搜索。
这是我在标题列中的示例数据,它有一个全文索引。我在示例中包括了“和$,以防我在Map中丢失了一个字符。

A sample photo with three keywords #sunset "sunset $sunset.

我使用SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = “o810”检查了我的表的字符集,它是'latin 1'。
我转到charsets/latin1.xml并更新了Map,以指示#是大写字母(假设这使其成为有效的单词字符)。

<ctype>
<map>
 00
 20 20 20 20 20 20 20 20 20 28 28 28 28 28 20 20
 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
 48 10 10 01 10 10 10 10 10 10 10 10 10 10 10 10
 84 84 84 84 84 84 84 84 84 84 10 10 10 10 10 10
 10 81 81 81 81 81 81 01 01 01 01 01 01 01 01 01
 01 01 01 01 01 01 01 01 01 01 01 10 10 10 10 10
 10 82 82 82 82 82 82 02 02 02 02 02 02 02 02 02
 02 02 02 02 02 02 02 02 02 02 02 10 10 10 10 20
 10 00 10 02 10 10 10 10 10 10 01 10 01 00 01 00
 00 10 10 10 10 10 10 10 10 10 02 10 02 00 02 01
 48 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
 01 01 01 01 01 01 01 10 01 01 01 01 01 01 01 02
 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02
 02 02 02 02 02 02 02 10 02 02 02 02 02 02 02 02
</map>
</ctype>

我删除了索引,重新启动了mariadb并重新创建了全文索引。
如果然后使用SET GLOBAL innodb_ft_aux_table = 'o810/photo'来转储全文索引。SELECT * FROM INNODB_FT_INDEX_TABLE显示“sunset”,但不包括“#sunset”,因此#不包含在单词中。
我一定是漏掉了什么明显的东西,但我找不到。任何帮助都将不胜感激。

  • 我尝试了不同的打开和保存charsets/Index.xml和charsets/latin1.xml的方法。
  • 我试着改变我的Map变化,以防万一我不能计数的权利。
  • 我已经多次停止并重新启动数据库服务器。
  • 我已经多次删除并重新创建了全文索引。
  • 我已经到处找过了。
vfh0ocws

vfh0ocws1#

更改字符集定义是一个非常糟糕的主意,因为这可能会影响其他操作,如排序等。
首选方法是修改服务器源代码中的storage/innobase/include/fts 0 tokenize. h文件,然后重新编译服务器。
为此,您只需更改true_word_char()宏:
#define true_word_char(c, ch) ((c) & (_MY_U | _MY_L | _MY_NMR) || (ch) == '_' || (ch) == '#')

相关问题