1. 程式人生 > 其它 >sql語法中u‘‘ n‘‘詳解

sql語法中u‘‘ n‘‘詳解

技術標籤:資料庫

今天翻閱檢視的時候,發現sql語句中有N'' U''這樣的語法,不懂什麼意思,於是搜尋了一下,得出如下結論。
例子:

selectU'中文'fromdual;
selectN'中文'fromdual;

那麼語句中的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);

綜上。