拥有一个Unicode(多字节字符集)Oracle数据库与NLS_LENGTH_SEMANTICS = BYTE似乎是一场等待发生的灾难。大多数应用程序中的字段验证仅检查字符数是否在边界内,而不是数据库默认字符编码方案中的字节序列长度!如果你有一个Unicode数据库,是否有充分的理由使用NLS_LENGTH_SEMANTICS = BYTE而不是CHAR?
答案 0 :(得分:2)
我认为这只是遗产。有很多旧的应用程序总是在字节上工作,如果这种情况发生变化可能会感到困惑。如果在其下面重新定义索引,那么字节字符串和索引转移到以字节为单位的外部应用程序/语言的任何内容都会以奇怪和不可预测的方式出错。
我不会对新应用程序使用字节语义,我同意它不是一个好的默认值。但是希望你使用NVARCHAR,这可以避免这个问题(因为它始终基于字符)。