2008年9月16日 星期二

呈現 ? 號

客戶詢問了一個問題:為何資料庫存入客戶公司抬頭,顯示出來卻是 ?XXX公司。

問題出在這個?號,是不是真的問號。

一般來說,前端作業人員在操作時,當然不會笨到輸入?號。
在查詢介面(SSMS)查出?號,不一定真的是問題,而是該字碼無法顯示字型,因此只能顯示?來代表。

例如,使用者輸入了一個使用者電腦中造字檔才有的字,但該特別的字卻只存在於該使用者的電腦。

那要如何判斷是不是特別的字呢?看起來與「?」是一模一樣的.

select '煊眾', cast('煊眾' as varbinary)
select N'煊眾', cast(N'煊眾' as varbinary)
select cast(0x3FB2B3 as varchar(20))
select cast(0x4A713E77 as nvarchar(20))

查詢的結果如下

image

由上面的例子知道,當無法儲存資料時,SQL Server 會將該字儲存成「?」。 也就是「煊」字會儲存成「?」(0x3F)

利用這個方法,發現了原來是資料庫設計時就設計錯誤了。中文字必須設計成 nchar(50) 或 nvarchar。而一旦使用 char(50) 或 varchar,就會發生儲存成?(0x3F)的問題。

沒有留言:

Share with Facebook