暂无图片
oracle数据库,varchar2(10)只能存储两个汉字?
我来答
分享
Yanhong
2021-09-01
oracle数据库,varchar2(10)只能存储两个汉字?

oracle数据库,varchar2(10)只能存储两个汉字?oracle11g
1.png
网上说ZHS16GBK是2字节编码
那么varcha2(10)应该最多可以存储5个汉字,
2.png
问题一:执行上述操作时,只能看到两个汉字
3.png
问题二:图形化界面新增记录,ename最多输入三个汉字
想输入:唐老鸭呀,四个汉字,标红
输入:唐老鸭,就没有问题
4.png
只能想到是字符集的问题
但是2字节编码的话,和上述问题是冲突的
请不吝赐教!!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Lucifer三思而后行
暂无图片

我使用 oracle 的客户端工具 sqldeveloper 做了下测试:

数据库字符集:ZHS16GBK

select * from nls_database_parameters;
复制

image.png

建表:

create table lucifer(id number,text varchar2(10));
复制

image.png

插入数据:

insert into lucifer values (1,'好可爱'); insert into lucifer values (1,'好可爱哈哈');
复制

image.png

结论:5个汉字均可插入。

image.png

从以上报错可以看出,是一个汉字2个字节。

暂无图片 评论
暂无图片 有用 0
打赏 0
暂无图片
Lucifer三思而后行
暂无图片

你这个感觉是PLSQL的问题吧,建议你使用sqlplus进行测试。

这个是由数据库的字符集决定的:

  • 如果是中文,ZHS16GBK,每个汉字占2个字节,所以最多5个汉字。

  • 如果是英文,AL32UTF8,每个汉字占3个字节,所以最多3个汉字。

建议查看字符集:

select * from nls_database_parameters;
复制
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
如何以毫秒为单位计算 Oracle 中两个时间戳之间的差异
回答 1
已采纳
Oracle中关于毫秒:Oracle毫秒的存储必须字段类型为timestamp(6)–数字表示存储的毫秒位数–当前毫秒级时间selecttochar(currenttimestamp,‘yyyymmd
告警日志乱码
回答 4
查看你数据库字符集并调整你的连接工具使用字符集与库使用字符集一致即可解决。
数据库中级有含金量还是ocp之类的证书有含金量?
回答 2
纯粹个人见解袄、从事系统集成行业15年了,现在我认为ocp也就是个入门证吧,ocm还有点用,比如应聘啊或者是去客户那干活,客户的认可度。
关于RMAN备份超过保留期但没有被标记为obsolete的问题
回答 2
@Horb.T谢谢回答。第一个问题按我的理解也应该是以第一次的level0级备份做的level1,虽然我没有找到相关的文档是如何描述这种情况的;但是第二个问题,您给的链接上面只是阐释的如何标记obso
同步工具SDR是否支持源端gaussdbT和gaussdbv5到目标端oracle的实时同步
回答 1
gaussdbT是支持的,v5是什么版本?
Oracle:ash报告可以显示所有会话吗?
回答 2
已采纳
不会,只有TOPSession
windows server2012R2(数据中心版)安装oracle19c 提示 ins-35180(无法检查可用内存) 请问有解决办法吗?
回答 1
是否用的administrator用户进行安装?
linxu8安装oracle无法调用图形化?
回答 3
已采纳
先想办法把时钟能调出来,然后再排查访问工具设置。祝你成功!
Oracle如何提高日志的切换频率?
回答 1
已采纳
通过参数archivelagtarget可以控制日志切换的时间间隔,以秒为单位,通过减少时间间隔,可以提高日志的切换频率。例如如下代码:SQL>altersystemsetarchivelagt
oracle sysdate跟current_date不一致,current_date正确,sysdate不对,有办法在线修改sysdate吗?
回答 1
已采纳
CURRENTDATE应该返回的是当前ORACLE会话中所用时区的时间。SYSDATE是返回数据库系统时间。在oracle11grid的时区放在$ORACLEHOME/crs/install/scrs