今天翻阅视图的时候,发现sql语句中有N'' U''这样的语法,不懂什么意思,于是搜索了一下,得出如下结论。
例子:
select U'中文' from dual; select N'中文' from dual;
那么语句中的N以及U分别代表什么意思?
N 在这里表示 Unicode,就是双字节字符。对于西文字符,用一个字节来存储过足够了,对于东方文字字符,就需要两个字节来存储。Unicode 为了统一、规范、方便、兼容,就规定西文字符也用两个字节来存储。
也就是说加 N 就表示字符串用 Unicode 方式存储。对应的就是 NCHAR 和 NVARCHAR2 类型。再比如:
select @status = N'stopped' select @status = 'stopped'
实际上上述两句赋值的结果是一样的,因为变量类型就是 nvarchar(Unicode 类型)。
而有些地方(比如:sp_executesql 的参数)不能自动转换,所以需要加 N 了。
那这个东东的作用是啥呢?
1.在做union all的时候,如果两个库的字符集不匹配,那会报错,可以用u和n进行转化。
下面这条sql就会报错
select u'' from a.dual union select '' from b.dual --ORA-12704: 字符集不匹配
需要修改为:
select u'' from dual union select u'' from dual
2.insert 和update的时候,在有的数据库不加N就会是乱码
insert into replies values(replies_seq.nextval,N'顶',sysdate,2);
综上。