【发布时间】:2013-03-11 19:46:44
【问题描述】:
问题的简短版本:有没有办法计算在 Oracle 数据库的 VARCHAR(n) 列中存储字符串的字符需要多少字节?
加长版: 以下 Oracle SQL 脚本将在第三条语句处失败。它将尝试在VARCHAR(10) 列中插入10 个字符;但是,这些字符之一是带有重音符号的 A。
CREATE TABLE TESTTABLE (NAME VARCHAR(10) NULL);
INSERT INTO TESTTABLE (NAME) VALUES ('abcdefghij');
--1 rows inserted.
INSERT INTO TESTTABLE (NAME) VALUES ('ábcdefghij');
--ORA-12899: value too large for column "ACME"."TESTTABLE"."NAME" (actual: 11, maximum: 10)
我的 C# 应用程序将字符串存储在 Oracle 数据库中,我不能只将列类型更改为 NVARCHAR2(10),这样可以。该应用程序预计会将任何较大的字符串修剪到 10 个字符的限制,因此 Oracle 不会抱怨它的长度。但是基于String.Length 的修剪是一种非常幼稚的策略:它会盲目地保留 "ábcdefghij" 及其所有 10 个 CLR 字符。
如何检测到 'á' 将在数据库行中占用 2 个字节,以便在发出 INSERT 语句之前将字符串修剪为 "ábcdefghi" ?
编辑:这个问题类似于Best way to shorten UTF8 string based on byte length
【问题讨论】:
标签: .net string oracle varchar