gpt4 book ai didi

c# - 在 C# 中计算多语言字符串长度以存储在 Oracle VARCHAR2 字段中

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:51 32 4
gpt4 key购买 nike

我需要能够在 Oracle 数据库中存储字符串。字符串的长度各不相同,其中一些可能很大(即:>10000 个字符)。

95% 的时间,字符串将 <=2000 个字符(或左右)只有 5% 的时间字符串会超过该限制。

通常情况下,我只是创建一个 CLOB 并将所有字符串填充到其中,但是检索大量包含存储在 CLOB 中的字符串的记录比使用 VARCHAR2 字段显着慢。

我的解决方案是在这个表中有两个字段:

  • TEXT_CONTENT VARCHAR2(4000 字节)
  • TEXT_CONTENT_OVERFLOW CLOB

当字符串少于 4000 个字符时,我将其全部存储在 TEXT_CONTENT 字段中,并将 TEXT_CONTENT_OVERFLOW 保留为空。如果字符串超过 4000 个字符,我将前 4000 个字符存储在 VARCHAR2 中,其余部分存储在 CLOB 中。

我使用的 ORM 的性能测试表明,它的运行速度比仅使用 CLOB 快一个数量级。

现在我的问题..

我需要在这些字段中存储多种语言——英语、法语、韩语、中文等

我希望能够在 VARCHAR2 中存储尽可能多的内容,但我需要确切地知道一个字符串包含多少字节。

如果它是一串英文字符,我知道我可以在那个 VARCHAR2 中容纳 4000 个字符。如果它是一个由所有法语字符组成的字符串,我知道我最多可以容纳 2000 个字符,因为法语字符实际上需要 2 个字节的存储空间......其他语言依此类推。

我需要弄清楚的是如何计算 C# 字符串的实际字节长度,以便我可以执行适当的 string.Substring 调用。

最佳答案

假设数据库编码为UTF8(可配置,IIRC),则

Encoding.UTF8.GetBytes(stringValue).Length

应该是一个有效的计数。您可能需要规范化为“规范形式”。 .NET 也有相应的方法,但哪种规范形式合适必须来自 Oracle 文档。

关于c# - 在 C# 中计算多语言字符串长度以存储在 Oracle VARCHAR2 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460863/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com