close

前端表單填入的資料有可能是各式語言版本,
所以在資料庫設計資料表的時候文字型態通常就是設定成nvarcher,
nvarchar第一個字母的"n"就是代表可接受Unicode萬用字元的編碼,
延續上回管理學生資料的範例:
http://jerry5217.pixnet.net/blog/post/257390008
我做了一個新增學生資料的表單,資料表設計如下圖:

一勞永逸全設nverchar,看得出來我很懶吧!XD
簡單的表單樣式設計如下:

第一段【學生資料查詢】就是上一次的範例,
第二段【新增資料】是這次的筆記,資料輸入完按下[新增]後的程式碼如下:

image

以上程式碼分三段,第1段程式就是很簡單的創造不重複的學號值,
第2段程式將頁面表單欄位輸入的內容新增至資料表中,
如果有新增成功,則第3段程式依據學號取得資料並顯示在頁面中,
這篇筆記在紀錄以下的狀況:

使用者在"家長姓名"這個欄位輸入非中文及英數字的時候,
存入資料表中的值就會變成"?"
一開始很納悶不是已經將資料欄位型態設成可接受Unicode的nvarchar了嗎?
而且
資料型態char或varchar以及nvarchar的差別在MSDN網站也有說明:
https://msdn.microsoft.com/zh-tw/library/ms176089.aspx
https://msdn.microsoft.com/zh-tw/library/ms186939.aspx

搜尋了一下Google發現解決方式超簡單,可是我讀過學寫程式的書卻都沒提過!
就是在SQL語法中,寫入字串前加一個字母"N"就可以了....
例如原本語法:INSERT INTO [資料表名稱] VALUES ('字串1' , '字串2' ,...)
修正後的語法:INSERT INTO [資料表名稱] VALUES (N'字串1' , N'字串2' ,...)
所以將上述第2段程式碼修改如下:

我們將"學生姓名"及"家長姓名"這二個欄位輸入的字串,
在SQL語法中寫入資料表時稍作修正,再試一次結果如下:

剛剛"宋前面"他爸的名字無法正確儲存會變成"?",現在"馬上來"他爸就沒問題了!
 

arrow
arrow

    王振權 發表在 痞客邦 留言(0) 人氣()