ORA-12704:字符集不匹配

        昨天在重建一个视图的时候,突然间就报了个ORA-12704字符集不匹配的错误。开始的时候我很是愕然,以为ORACLE是不是傻了,为什么会报这样的一个错误。

后来上网查了下,发现是由于NVARCHAR2与VARCHAR2的问题。以下是官方文档中关于这两种数据类型的介绍:

Code Data Type Description

1

VARCHAR2(size [BYTE | CHAR])

Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2.

BYTE indicates that the column will have byte length semantics. CHAR indicates that the column will have character semantics.

1

NVARCHAR2(size)

Variable-length Unicode character string having maximum length size characters. The number of bytes can be up to two times size for AL16UTF16 encoding and three times sizefor UTF8 encoding. Maximum size is determined by the national character set definition, with an upper limit of 4000 bytes. You must specify size for NVARCHAR2.


水平有限,翻译的大概意思我是这样理解的:

1.VARCHAR2(size [BYTE | CHAR])是可变长度的字符,最大长度为size个字节或者字符。最大长度为4000,最小长度为1。必须要指定VARCHAR2的长度。

BYTES表明表将会有字节长度的语义。CHAR表明列将有字符语句。

2.NVARCHAR2(size),可变长度UNICODE字符串的最大长度为size个字符。字节的长度当编码为AL16UTF16时可以是2倍,当编码是UTF8时为3倍。

最大长度决定于国家字符集(national character set)的定义,最大为4000个字节。必须要为NVARCHAR2指定长度。

也就是说,

相同点:a.两者都可用以定义可变长度的字符串

                b.两者的最大长度都是4000

                c.如果存储英文或者数字等两者基本可以等同

不同点:NVARCHAR2的长度是根据国家字符集来决定的。而VARCHAR2的单位有两种,分别是字节和字符。


解决方法:

1.TO_CHAR(NVARCHAR2_TYPE)

将NVARCHAR2转成VARCHAR

2.N'VARCHAR2_TYPE'

将字符转成UNICODE字符

以上解决方法引自:

http://blog.csdn.net/lqh4188/article/details/7498354



你可能感兴趣的:(ORACLE)