Oracle中存中文时的字数问题

          一次遇到了这样一个问题:有张表的“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)都行。

猜你喜欢

转载自blog.csdn.net/zhang854429783/article/details/8247646