Oracle中存中文时的字数问题

本文探讨了在数据库中使用VARCHAR2类型时,中文字符与英文字符占用字节数不同导致的问题,以及如何通过修改数据库字符集和调整字段类型来解决描述字段超过字节数限制的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          一次遇到了这样一个问题:有张表的“description”字段允许用户最多输入2000字,页面上当用户提交时需要用js检查字数是否超过2000。测试时发现eclipse控制台老报类似“值太大(实际值:xx,最大值:xx)”这样的错。于是,抽空专门深究了下这个问题。

  • Oracle中表的字段类型如果是varchar2类型,则最大不允许超过4000字节
  • Oracle中表的字段类型可以定义成以下两种形式:

                    1:description varchar2(2000)           --    表示该字段最大允许放2000字节的内容

                    2:description varchar2(2000 char)   --    表示该字段最大允许放2000个字符

        一个中文字符或者一个英文字符都算一个字符,但是一个中文字符和一个英文字符所占的字节数就不一定一样了。当数据库的字符集设为UTF-8时,就杯具了,此时一个英文字符是占1字节,而中文字符是占3(或者4)个字节,此时如果输2000个中文,虽然慢足“最大允许放2000个字符”,但是占了6000字节(2000字 X 3字节/字)超过了4000字节的极限了。

         解决办法:如果可以的话就把数据库的字符集修改成ZHS16GBK等中文字符集吧,此时不管中文字符还是英文字符都是2字节了,再把description的类型改为varchar2(4000)或varchar2(2000 char)都行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值