1.出现原因
在进行union all的操作时,如果两个列的字符集不匹配,就会报此错误。在Oracle中varchar(char)和nvarchar(nchar)所使用的字符集是不同的,前者使用8-bit codepage,后者使用unicode.虽然codepage在空间上消耗更少,但是使用unicode好处在兼容性更强,特别是在于其他系统交互的时候减少了转换所需消耗的时间。
2.解决方法
核心思路是将varchar转换为nvarchar或者将nvarchar转换为varchar,这里提供两个方法以供参考。
2.1 N
对于常量,再其前边加N
可以将其转换为nchar
2.1 to_char() / to_nchar()
TO_CHAR:
TO_CHAR (character) converts NCHAR, NVARCHAR2, CLOB, or NCLOB data to the database character set. The value returned is always VARCHAR2.
TO_NCHAR:
TO_NCHAR (character) converts a character string, CHAR, VARCHAR2, CLOB, or NCLOB value to the national character set. The value returned is always NVARCHAR2.