mysql保存 亂碼 或失敗問題

在mysql中varchar類型是隻能存儲字符,不能存儲中文的,大多數情況都是因爲把字段類型設置成varchar的原因,把varchar改成VARBINARY在插入中文一般不會再有問題,如果還是亂碼,那就是你客戶端插入數據的時候的編碼要改一下,改成utf-8或者是gb2312都可以。或GBK

以下是對mysql中字段類型的詳細說明:更多詳細內容請參考-----》http://edu.codepub.com/2010/0512/22640.php

 

首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的區別:

CHAR, VARCHAR, TEXT稱爲非二進制字符串;

BINARY, VARBINARY, BLOB稱爲二進制字符串;

二進制字符串和非二進制字符串的區別是:
二進制字符串包含的是字節字符串,非二進制字符串包含的是字符字符串;

後者可以定義字符集,前者不可以;

而且排序和比較前者基於列值字節的數值值,後者則根據字母順序進行排序或比較;

 BINARY類似與CHAR類型,但是保存二進制字符串而不是非二進制字符串;

VARBINARY類似與VARCHAR類型,但是保存二進制字符串而不是非二進制字符串;
同樣類似的BLOB對應TEXT類型(相應的有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB和TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT)

2.

CHAR和VARCHAR相同之處:

都可以定義字符串的長度,如CHAR(M), VARCHAR(M);

 不同之處:

CHAR(M)定義的列的長度爲固定的,M取值可以爲0~255之間,當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。

 VARCHAR(M)定義的列的長度爲可變長字符串,M取值可以爲0~65535之間,(VARCHAR的最大有效長度由最大行大小和使用的字符集確定。整體最大長度是65,532字節)。VARCHAR值保存時只保存需要的字符數,另加一個字節來記錄長度(如果列聲明的長度超過255,則使用兩個字節)。VARCHAR值保存時不進行填充。當值保存和檢索時尾部的空格仍保留,符合標準SQL。

注意:MySQL 數據庫的varchar類型在4.1以下的版本中的最大長度限制爲255,其數據範圍可以是0~255或1~255(根據不同版本數據庫來定)。在 MySQL5.0以上的版本中,varchar數據類型的長度支持到了65535,也就是說可以存放65532個字節的數據,起始位和結束位佔去了3個字 節,也就是說,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的數據可以使用可變長的varchar來存放,這樣就能有效的減少數據庫文 件的大小。

 CHAR和VARCHAR最大的不同就是一個是固定長度,一個是可變長度。由於是可變長度,因此實際存儲的時候是實際字符串再加上一個記錄字符串長度的字節(如果超過255則需要兩個字節)

 如果分配給CHAR或VARCHAR列的值超過列的最大長度,則對值進行裁剪以使其適合。如果被裁掉的字符不是空格,則會產生一條警告。如果裁剪非空格字符,則會造成錯誤(而不是警告)並通過使用嚴格SQL模式禁用值的插入。

 由於BINARY和VARBINARY分別與CHAR和VARCHAR對應,因此兩者的區別也和CHAR和VARCHAR的區別類似。

 但是注意VARBINARY定義的M值範圍爲0<=M<=255

3. VARCHAR和TEXT類型的區別:

TEXT類型不需要指定M值,其他方面與VARCHAR都類似:比如存儲的是可變長度,即不夠的部分不需要右邊空格填充;等等。

TEXT與VARCHAR類似,實際需要保存字符串本身外加兩個字節保存字符串的實際長度。

看下錶容易理解上面講述的區別:

字符串類型的存儲需求(M爲最大長度,L實際存儲字符串的長度)

發佈了62 篇原創文章 · 獲贊 9 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章