SQL數據庫對於保存特殊字符的解決辦法

數據庫的Char、Vachar類型能夠兼容漢字,但特殊字符不行,在保存包含有特殊字符的字符串、正文時,會將特殊符號替換成一個」?」號。

例如: 「基礎教育課程手機報•特刊」 == 》 「基礎教育課程手機報?特刊」

解決辦法是將字段改爲NChar,NVarchar等類型,在入庫的時候每一個字符串插入前都加入一個N,如N’lily’、N’Male’,兼容性會更好,做爲Nvarchar字段,這是一種推薦作法!

小貼士:

char類型: 對英文(ASCII)字符佔用1個字節,對一個漢字佔用2個字節,CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,好比定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要佔去10個字節的空間。由於是固定長度,因此速度效率高。

Varchar類型:Varchar 的類型不以空格填滿,好比varchar(100),但它的值只是」qian」,則它的值就是」qian」 而char 不同,好比char(100),它的值是」qian」,而實際上它在數據庫中是」qian 「(qian後共有96個空格,就是把它填滿爲100個字節)。

因爲char是以固定長度的,因此它的速度會比varchar快得多!但程序處理起來要麻煩一點,要用trim之類的函數把兩邊的空格去掉!

VARCHAR存儲變長數據,但存儲效率沒有CHAR高。若是一個字段可能的值是不固定長度的,咱們只知道它不可能超過10個字符,把它定義爲 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。爲何「+1」呢?這一個字節用於保存實際使用了多大的長度。

Nchar類型和Nvarchar類型是怎麼一回事呢?爲了與其餘多種字符的轉換,如中文,音標等,對每一個英文(ASCII)字符都佔用2個字節,對一個漢字也佔用兩個字節,全部的字符都佔用2個字節。

例如:

varchar(n):變長型字符數據類型,存儲最長長度爲8,000 個字符。

舉個例子: insert a select ‘木子a’ — 存儲長度爲5個字節,餘下的3個字節所有釋放 insert a select ‘木神易 —-存儲長度爲6個字節,餘下的2個字節所有釋放 —意思是varchar變長字符數據類型與存儲數據的實際長度是一致的

nvarchar(n):可變長度 Unicode 數據,其最大長度爲 4,000 字符。 字節的存儲大小是所輸入字符個數的兩倍, 就是說它是雙字節來存儲數據的。 若是存儲數據若是存在單字節時,它也是以雙字節來佔用存儲空間的。

varchar通常適用於英文和數字,Nvarchar適用中文和其餘字符,其中N表示Unicode常量,能夠解決多語言字符集之間的轉換問題數據庫

相關文章
相關標籤/搜索