我不时会看到如下的枚举:
[Flags]
public enum Options
{
None = 0,
Option1 = 1,
Option2 = 2,
Option3 = 4,
Option4 = 8
}
Run Code Online (Sandbox Code Playgroud)
我不明白[Flags]-attribute 到底是做什么的.
任何人都可以发布一个很好的解释或示例?
有没有办法在C#中编写二进制文字,比如用0x前缀十六进制?0b不起作用.
如果没有,有什么简单的方法可以做到这一点?某种字符串转换?
问题的简短版本:有没有办法计算VARCHAR(n)在Oracle数据库的列中存储字符串字符所需的字节数?
更长版本:以下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)
Run Code Online (Sandbox Code Playgroud)
我的C#应用程序将字符串存储在Oracle数据库中,我不能只将列类型更改为NVARCHAR2(10),这将起作用.应用程序应该将任何较大的字符串修剪为10个字符的限制,因此Oracle不会抱怨它的长度.但String.Length基于a- based的修剪是一种非常天真的策略:它会盲目地将"ábcdefghij"保留为其所有10个CLR字符.
如何检测'á'将占用数据库行中的2个字节,以便在发出语句之前将字符串修剪为"ábcdefghi"INSERT?
编辑:这个问题类似于基于字节长度缩短UTF8字符串的最佳方法