查看: 14678|回复: 8

[讨论] 关于ZHS16GBK字符集下存生僻字的问题

[复制链接]
论坛徽章:
3
复活蛋
日期:2012-02-15 22:12:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20优秀写手
日期:2013-12-18 09:29:13
跳转到指定楼层
1#
发表于 2016-6-23 20:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近开发反馈一下问题,  ‘㛃’  插入数据库为问号(?),测试了一下还真是。这个字应该是在ZHS16GBK下没有对应的编码,所以导致才显示为问号。
想请问大家,对于这种生僻字的保存都是用什么办法解决的。
看到杨长老一个链接说是造字,但是他的链接已经失效了,因为他的博客链接改变过。

论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
2#
发表于 2016-6-24 17:25 | 只看该作者
没有办法.我们也遇到这种情况..

使用道具 举报

回复
论坛徽章:
3
复活蛋
日期:2012-02-15 22:12:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20优秀写手
日期:2013-12-18 09:29:13
3#
 楼主| 发表于 2016-6-24 22:46 | 只看该作者
lfree 发表于 2016-6-24 17:25
没有办法.我们也遇到这种情况..

好吧,看来只有换字符集了、不知道开发有没有变通的办法。
之前我想是不是用NVARCHAR2就可以解决了,测了一下,在SQLPLUS下还是不行,有Oracle SQL develop中倒是可以的。

使用道具 举报

回复
论坛徽章:
0
4#
发表于 2016-6-25 09:59 | 只看该作者
东北胖子 发表于 2016-06-24 22:46

好吧,看来只有换字符集了、不知道开发有没有变通的办法。
之前我想是不是用NVARCHAR2就可以解决了,测了一下,在SQLPLUS下还是不行,有Oracle SQL develop中倒是可以的。
只要数据库nvar字段保存的是正确的编码就可以,Sqlplus上显示不正确,那是因为客户端环境配置的问题。

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
27
至尊黑钻
日期:2015-10-19 09:57:44红钻
日期:2015-10-19 09:57:06ITPUB15周年纪念
日期:2018-10-26 11:37:06
5#
发表于 2016-6-28 14:52 | 只看该作者
上周一个同事也遇到这个问题了。听他说是 前端传输的时候采用GB18030就OK了

使用道具 举报

回复
论坛徽章:
12
2012新春纪念徽章
日期:2012-01-04 11:49:54秀才
日期:2015-09-11 10:43:06处女座
日期:2015-07-20 16:19:14懒羊羊
日期:2015-03-09 13:14:372015年新春福章
日期:2015-03-06 11:57:31美羊羊
日期:2015-03-04 14:48:58马上有房
日期:2014-07-21 13:13:25凯迪拉克
日期:2013-09-12 15:56:12蜘蛛蛋
日期:2013-06-18 16:09:38咸鸭蛋
日期:2013-03-14 08:29:23
6#
发表于 2016-6-28 15:00 | 只看该作者
输入时的客户端的字符集是数据库字符集的子集(或相等),这样可以保证数据库的数据的完整
输出时的客户端的字符集是数据库字符集的超集(或相等),这样可以保证数输出时正常显示

使用道具 举报

回复
论坛徽章:
122
现任管理团队成员
日期:2011-05-07 01:45:08
7#
发表于 2016-6-28 19:59 | 只看该作者
doni 发表于 2016-06-28 15:00输入时的客户端的字符集是数据库字符集的子集(或相等),这样可以保证数据库的数据的完整
输出时的客户端的字符集是数据库字符集的超集(或相等),这样可以保证数输出时正常显示
我觉得你应该再看看子超集的定义了…

使用道具 举报

回复
论坛徽章:
3
复活蛋
日期:2012-02-15 22:12:02ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20优秀写手
日期:2013-12-18 09:29:13
8#
 楼主| 发表于 2016-6-28 22:47 | 只看该作者
doni 发表于 2016-6-28 15:00
输入时的客户端的字符集是数据库字符集的子集(或相等),这样可以保证数据库的数据的完整
输出时的客户端 ...

如果输入的汉字,在字符集里没有定义怎么办?
你可以试一试,我在一楼说的那个字,你在  ZHS16GBK的字符集下插入试一试。

使用道具 举报

回复
论坛徽章:
12
2012新春纪念徽章
日期:2012-01-04 11:49:54秀才
日期:2015-09-11 10:43:06处女座
日期:2015-07-20 16:19:14懒羊羊
日期:2015-03-09 13:14:372015年新春福章
日期:2015-03-06 11:57:31美羊羊
日期:2015-03-04 14:48:58马上有房
日期:2014-07-21 13:13:25凯迪拉克
日期:2013-09-12 15:56:12蜘蛛蛋
日期:2013-06-18 16:09:38咸鸭蛋
日期:2013-03-14 08:29:23
9#
发表于 2016-6-29 15:15 | 只看该作者
东北胖子 发表于 2016-6-28 22:47
如果输入的汉字,在字符集里没有定义怎么办?
你可以试一试,我在一楼说的那个字,你在  ZHS16GBK的字符 ...

如果客户端可以显示(客户端字符集有,或造字),而对应内码又是被数据库字符集所接受的,就可以正常保存在数据库并在客户端显示,对于其他的客户端的话要看字符集了(如果是造字的,其他客户端就显示不了了)

数据库在保存char时,会把客户端的char转换成本地的字符集,如果客户端是超集,在转换中就可以损失数据。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表