生僻字问题解决

问题1.生僻字不能在数据库中保存与正常显示

 䶮、㛃、𠅤等三字节汉字可以正常保存在数据库中,𫓩、𬱖等四字节汉字无法保存在数据库表中。

原因分析:一般来说,正常汉字不会超过 3 个字节,但是会出现一些生僻字为 4 个字节 (当然,有的 emoji 表情符号也是 4 个字节),而 MySQL 的 UTF-8 编码只能支持 1-3 个字节,如果想保存 4 个字节的字符,则需要把字符集修改为 utf8mb4,而且 MySQL 的版本要高于 5.5.3。

问题2:数据库修改编码utf8mb4后能正常保存的生僻字,无法从数据库传递到到系统中

解决办法:在jdbc连接中添加useUnicode=true;  characterEncoding=utf8;

问题3:页面显示?或者为空

页面显示为空,大概率是问题2导致的。数据从数据库传入后台时就无法正常获取了。根据问题2的解决办法可解决。

页面显示为?,要分析是是一个?还是两个??

一个?说明后台是把一个四字节的汉字当成了一个字。说明后台处理这个字没有问题,后台编码没问题。这个时候可能是页面编码的问题。

举例:下面是文心一言页面,点击查看源码的内容。可以看到编码是utf-8。

 那么可以用这个方法看下自己的页面是否是utf-8。如果不是,则要根据自己的前端架构修改页面的编码。

如果页面显示为两个??

那么应该考虑后台代码并不能把这个四字节的汉字当成一个字。那么此时问题应该是后台处理业务逻辑的代码不是utf-8,则应该根据后台架构,修改业务逻辑处理的编码为utf-8。然后再看页面显示生僻字是否正常,还是变成一个?。在观察是否进行上一步操作。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Oracle中处理生僻有几种方法。首先,可以将需要存储生僻段类型修改为nvarchar2,而不是varchar2。然后,可以通过数据库图形化工具手动将生僻转换后插入该段。最后,进入业务系统页面查看,生僻应该能正常显示。\[1\] 另一种方法是将生僻转为Unicode编码,然后使用utl_raw.cast_to_varchar2函数查询结果。这种方式可以在varchar2段中正确存储生僻。\[2\] 需要注意的是,在Oracle中,实际上只有nvarchar2段才能正确存储生僻。因此,如果需要存储多个生僻,可以将其分解处理,并使用utl_raw.cast_to_nvarchar2函数进行插入。\[3\] #### 引用[.reference_title] - *1* [解决Oracle存储生僻、oracle生僻,oracle偏僻、数据库生僻,数据库偏僻](https://blog.csdn.net/qq_29062045/article/details/123865076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [oracle生僻解决方案](https://blog.csdn.net/qq_41793064/article/details/93721735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值