问题现象:
文本组件中使用特殊的字符平方的角标,发现保存了之后清空缓存重新打开仪表盘就发现平方的角标变成了?。具体如下图
问题原因
该问题主要是由于知识库中的字符集在存储数据的时候对于特殊的字符角标无法进行识别,导致产品将符号输入到数据库的时候,数据库就转成了?,等再次查询的时候就会查询出来?导致这个问题。
解决方案:
只能通过更换知识库的字符集为utf8mb4来进行处理,utf8mb4相比于urt8能存储更多的数据,具体如下图。由于直接更换字符串会对原本已经存储的数据造成影响,推荐的方式备份知识库之后,创建一个新的知识库启动smartbi,然后再新环境上恢复知识库来切换字符集。
延伸:
GBK字符集限制:GBK字符集不支持平方号等特殊符号,因为其编码范围不包括这些字符。它主要用于存储和显示中文字符。
字符编码对比:与GBK相比,UTF-8编码支持更广泛的字符集,包括平方号等特殊符号。UTF8mb4作为UTF-8的超集,还支持更多字符如Emoji表情等。
字符占用字节数:不同编码下,字符占用的字节数不同。UTF8mb4每个字符最多占用4个字节,UTF-8最多占用3个字节,而GBK中文字符占用2个字节,英文字符占用1个字节。
数据库索引键长度限制:在数据库索引键长度限制下(如768字节),需要注意编码转换可能导致的超长问题。然而,对于产品知识库表等主键ID较短的场景,通常不会出现此类问题。