VARCHAR最大长度为4000,但只能存储2666字节长的泰语文本

 null 发布于 2023-01-31 10:22

我正在使用带有PL/SQL的Oracle数据库11g.程序是用C#,.NET 4编写的.

我有一个包含varchar(4000)列的表,我想在DB中存储一个泰语文本.我发现当我尝试以泰语存储文本时,其长度超过1333,Oracle抛出异常,尽管最大长度为4000:

ORA-01461:只能将LONG值绑定到LONG列中

我还注意到,当我使用较小的限制时,它按预期工作.ie:varchar(10) - 允许长度为10和更长的文本的值抛出异常:

ORA-01401 插入的值对于列太大

从我已经做过的测试中我可以假设从一个'X'oracle中停止计算实际字母的长度.相反,它乘以最长字母长度值中的字母数(泰语中最长字母的长度为3 - 意味着它就像3个字符),所以1333*3 = 3999,我只能添加另一个字符(用类似的语言)英语).

我的问题:

    为什么不同的最大长度的行为有差异?

    在我尝试将其插入表格之前,我能否知道文本的真正限制?(假设文本是泰语和英语,也可能也有不同的语言)

重要说明:因为我需要支持一个非常大且功能正常的系统,所以我无法将数据类型切换到俱乐部,但它可以解决问题.

谢谢你的帮助.


编辑

我计算这1333个字符的字节数.它们的字节长度是2666,仍然小于4000.我知道最大长度是以字节为单位但我不明白为什么我得到上面的例外.我用过:System.Text.ASCIIEncoding.Unicode.GetByteCount(text)检查字节数.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有