我正在研究数据库访问层,并且刚刚注意到Oracle 11g似乎在处理别名中的非拉丁字符时遇到了一些问题。
它认为,就别名而言,超过0x7F的字符在30字符别名长度限制方面似乎算作两个字符。
例如,在Oracle SQL Developer和ODP.net中:
SELECT
LENGTH('ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ') "ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔ"
FROM DUAL
工作并报告字符串长度为15,但是:
SELECT
LENGTH('ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔx') "ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔx"
FROM DUAL
报告ORA-00972:'标识符太长'错误。
这似乎意味着别名字符串的编码方式意味着重音字符变为两个字符。
这是预期的,有没有人知道实际的限制/编码是什么?
我需要一种可靠的方法来确定是否允许提供别名字符串。
Oracle的设置如下:
客户端:
数据库:
答案 0 :(得分:0)
column_name
中的 dba_tab_cols
是varchar2(30 byte)
。这意味着它可以存储多达30个字节的数据。您的数据库字符集是UTF-8,因此每个字符可能需要最多3个字节的数据,这意味着,最坏的情况是,您可能限制为10个字符。假设您的所有标识符都使用有效的Windows-1252字符,我认为任何字符都不需要超过2个字节的存储空间。
如果您正在尝试从客户端编程语言确定标识符是否有效