昨天在重建一个视图的时候,突然间就报了个ORA-12704字符集不匹配的错误。开始的时候我很是愕然,以为ORACLE是不是傻了,为什么会报这样的一个错误。
后来上网查了下,发现是由于NVARCHAR2与VARCHAR2的问题。以下是官方文档中关于这两种数据类型的介绍:
Code | Data Type | Description |
---|---|---|
1 |
| Variable-length character string having maximum length
|
1 |
| Variable-length Unicode character string having maximum length |
水平有限,翻译的大概意思我是这样理解的:
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