暂无图片
oracle如何插入特殊符号
我来答
分享
ora_hub
2022-10-28
oracle如何插入特殊符号

select '†',ascii('†'),dump('†') from dual

请教下这种十字架的特殊符号怎么插入到表里面啊

有2个库,一个AL32UTF8 一个ZHS16GBK



我来答
添加附件
收藏
分享
问题补充
6条回答
默认
最新
DarkAthena

1.如果数据库是AL32UTF8,那么客户端环境变量也要设置成AL32UTF8
NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8
2.如果数据库是ZHS16GBK,那么这个字符只能存进NVARCHAR2类型的字段中了,否则就只能转换成其他码点来进行存储,比如应用转换成unicode编码,再存进来

这篇文章最后面刚好有类似的场景
https://www.modb.pro/db/530818

暂无图片 评论
暂无图片 有用 0
暂无图片
StoneDB
2022-10-28
不错
PiscesCanon
2022-11-01
还是要说清楚的吧,这个看了会让人觉得NLS_LANG就要和数据库字符集一样的设置。 而且提问里边只说了有2个库,一个AL32UTF8 一个ZHS16GBK,没说客户端字符集。 好像PLSQLDEV这个工具是有自己的字符集的吧。 另外你说的这个方法,你试试对windows上边的sqlplus客户端是有问题的,某些特殊字符在通过sqlplus服务器送进去数据库的时候已经丢失了编码信息(无论NLS_LANG怎么设置),因为windows console的界面936字符集不支持某些特殊字符。 如果是服务器上sqlplus,一般服务器OS的字符集是UTF8那就没问题,此时NLS_LANG设置为AMERICAN_AMERICA.AL32UTF8。 https://www.cnblogs.com/PiscesCanon/p/15157506.html
DarkAthena
答主
2022-11-01
回答是为了解决题主的问题,题主问的是两个字符集的库怎么存这个特殊符号,所以回答就分了两种场景,AL32UTF8时怎么存,ZHS16GBK怎么存。另外PLSQLDEV使用的字符集就是操作系统环境变量NLS_LANG中设置的,从题主的截图来看,这个符号被识别成了问号,所以很明显此时客户端的字符集并不支持这个符号。而且题主通过其他渠道进行了咨询,测试过chr(14844064)能正确返回这个字符,因此可以确定题主的数据库字符集为AL32UTF8,是支持这个字符的,只是因为客户端字符集不支持这个字符导致的问题
展开全部评论(5条)
ora_hub

select '†这个特殊的字符剑号怎么入库' from dual

是一段文字中有这个符号,不单单是一个符号,疾病目录里面

暂无图片 评论
暂无图片 有用 0
Uncopyrightable


暂无图片 评论
暂无图片 有用 0
ora_hub
题主
2022-10-28
谢谢
PiscesCanon

采纳的答案有个地方误人子弟,NLS_LANG的设置跟数据库字符集没任何关系。

这年头还是有人搞不清楚。

暂无图片 评论
暂无图片 有用 0
DarkAthena
2022-11-01
因为该题主数据库字符集是UTF8,客户端字符集是GBK,插入GBK字符到数据库中是没问题的,但不能插入非GBK字符集到数据库中,所以客户端字符集要设置成UTF8。也就是说,数据库字符集是UTF8,是插入这个字符的前提条件之一
DarkAthena
2022-11-01
具体分析可以看我这篇文章 https://www.modb.pro/db/240291
PiscesCanon




暂无图片 评论
暂无图片 有用 0
DarkAthena

image.png

074bda7302a08914c1e4933d68d232e.png
4130cecc54299e86231ae6a6c1b77a5.png
image.png
838a4a597b93958cf1755950fd36c8e.png
image.png

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏