注意:在SQL SERVER中使用NChar、NVarchar和NText

來源:互聯網
上載者:User

  天天蹲在園子裡看別人的,自己好久好久沒寫新隨筆啦~~先感慨下,大家不要扔磚頭哈!

  言歸正傳,前天同事在幫客戶錄資料的時候,發現有一個人的名字裡有個“㛃”(念jie,同“潔”)字,但用搜狗拼音和萬能五筆都打不出來,我百度了一下,找到了一篇搜狗論壇的建議帖,有人建議搜狗拼音裡增加“

 

”字的輸入,下面跟帖的人貼出了這個“㛃”字。

  既然字已經找到,我以為一切OK了,把它複製到飛秋裡發給同事,竟然顯示的是“?”!這是一個神馬情況啊?

  我立馬又去翻那個文章,在下面看到了論壇版主的回複:

 

   貌似是編碼的問題啊,我又把它複製到一個建立的記事本裡,儲存的時候果然出現了提示:

 

  果然是編碼的問題啊!這時候,我突然想到,存放姓名的欄位用的是varchar型,它能不能存這個字呢?一試,果然也是一個問號!改用nvarchar型欄位來存,果斷是沒問題的。查了下SQL SERVER聯機叢書,看到varchar同nvarchar的區別:

  除下列情況之外,ncharnvarcharntext 的使用分別與 charvarchartext 的使用相同:

    • Unicode 支援更大範圍的字元。
    • 儲存 Unicode 字元需要更大的空間。
    • nchar 列的最大大小為 4,000 個字元,與 charvarchar 不同,它們為 8,000 個字元。
    • 使用最大說明符,nvarchar 列的最大大小為 2^31-1 位元組。有關 nvarchar(max) 的詳細資料,請參閱使用大值資料類型。
    • Unicode 常量以 N 開頭指定:N'A Unicode string'。
    • 所有 Unicode 資料使用由 Unicode 標準定義的字元集。用於 Unicode 列的 Unicode 定序以下列屬性為基礎:區分大小寫、區分重音、區分假名、區分全半形和二進位。

  SQL SERVER裡建表,我一直用的都是varchar,總感覺nvarchar除了儲存中文的時候在長度和字元數上有統一性的好處之外,基本沒有什麼需要用到的地方。這回得了教訓,以後再有錄入人名或是其他可能出現GBK不包含的生僻字的欄位,最好還是使用nchar、nvarchar或ntext,以免在後面給程式留坑。

  PS:感謝dreamhappy同學的提醒,使用SQL語句在nvarchar類型的列中INSERT或UPDATE資料時,最好在字串前面加上N,如:insert into table(a) values(N'㛃'),不然超出GBK的漢字插入資料庫中依然會顯示成“?”號。如果誰有能省寫N的方法,請在評論中說一下,謝謝!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.