我有一个情况,我需要在一个oraclavarchar中插入4000多个字符,但有人建议我不要使用CLOB。建议的解决方案是把它分成两列,每列4000个,8000个就足够了。我使代码是动态的,这样可以处理X个数目的列以供重用。它工作得很好,通过了测试等等,直到它被部署,有人从微软的产品中复制和粘贴,它崩溃了,因为在函数中生成了4000多个字节。我没有考虑过unicode。在
我尝试了几种方法来解决这个问题,然后决定用4000个字符开始,如果字节长度超过4000,删除一个字符并再次检查字节长度。这是可行的,但我想知道是否有更好的解决办法。该函数还将列名从“column”更改为“column1”、“column2”
text = data[key]
index = 1
while text:
length = 4000
while len(text[0:length].encode('utf-8')) > 4000:
length -= 1
data['{}{}'.format(key, index)] = text[0:length]
text = text[length:]
index += 1
del data[key]
最后我将G. Andersonslink与我的代码组合在一起。它的效率更高,因为它不会对每个长度检查进行编码。在
我还考虑过使用
encode('unicode-escape')
来解决unicode问题,但这可能会使我的字符串长度增加一倍以上。在检查您针对CLOB的建议是最新的还是基于有关使用定位器访问LOB的旧信息。在
在cxu-Oracle中,对于“小”clob的最佳实践是将它们表示为字符串:您的代码将是简单而高效的。参见示例https://github.com/oracle/python-cx_Oracle/blob/master/samples/ReturnLobsAsStrings.py
另一个解决方案是使用支持32K VARCHAR2的Oracle DB的最新版本。在
相关问题 更多 >
编程相关推荐