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