重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
mysql varchar(50) 不管中文 還是英文 都是存50個的
目前創新互聯已為上千的企業提供了網站建設、域名、網站空間、網站托管、企業網站設計、宜黃網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。
MySQL5的文檔,其中對varchar字段類型這樣描述:varchar(m) 變長字符串。M 表示最大列長度。M的范圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,最大有效長度是65,532字節)。
為何會這般變換?真是感覺MySQL的手冊做的太不友好了,因為你要仔細的繼續往下讀才會發現這段描述:MySQL
5.1遵從標準SQL規范,并且不刪除VARCHAR值的尾部空格。VARCHAR保存時用一個字節或兩個字節長的前綴+數據。如果VARCHAR列聲明的長度大于255,長度前綴是兩個字節。
好了,貌似懂了一點。但具體他說的長度大于255時使用2個字節長度前綴,小學減法題:65535 - 2 = 65533啊。不知道這些大牛如何計算的,暫且保留疑問吧?
注:我測試了一下使用UTF8編碼,varchar的最大長度為21854字節。
在mysql 5.0.45版本,數據庫編碼utf8下進行測試:varchar最長定義為21785。也就是說不論字母、數字、漢字,只能放21785個。
1.
blob是二進制大對象,可以容納可變量數量的數據,其中blob分為4中類型:TINYBLOB,BLOB,mediumblob和LongBlob,他們容納的長度是不同的.
Text同樣也分為四種類型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
2.
blob被視為二進制字符串,Text被視為非二進制字符串;
blob列沒有字符集,并且排序和比較基于列值字節的數值值。
TEXT列有一個字符集,并且根據字符集的校對規則對值進行排序和比較。
在MySQL TEXT或BLOB列的存儲或檢索過程中,不存在大小寫轉換,當未運行在嚴格模式時,如果你為BLOB或TEXT列分配一個超過該列類型的最大長度的值值,值被截取以保證適合。如果截掉的字符不是空格,將會產生一條警告。
使用嚴格SQL模式,會產生錯誤,并且值將被拒絕而不是截取并給出警告.在大多數方面,可以將BLOB列視為能夠足夠大的VARBINARY列。同樣,可以將TEXT列視為VARCHAR列。
3.
BLOB和TEXT在以下幾個方面不同于VARBINARY和VARCHAR.
BLOB和TEXT列不能有默認值.
當保存或檢索BLOB和TEXT列的值時不刪除尾部空格。(這與VARBINARY和VARCHAR列相同).
對于BLOB和TEXT列的索引,必須指定索引前綴的長度。對于CHAR和VARCHAR,前綴長度是可選的.
LONG和LONG VARCHAR對應MEDIUMTEXT數據類型。這是為了保證兼容性。如果TEXT列類型使用BINARY屬性,將為列分配列字符集的二元校對規則.
MySQL連接程序/ODBC將BLOB值定義為LONGVARBINARY,將MySQL TEXT值定義為LONGVARCHAR。由于BLOB和TEXT值可能會非常長,使用它們時可能遇到一些約束.
BLOB或TEXT對象的最大大小由其類型確定,但在客戶端和服務器之間實際可以傳遞的最大值由可用內存數量和通信緩存區大小確定。你可以通過更改
max_allowed_packet變量的值更改消息緩存區的大小,但必須同時修改服務器和客戶端程序。例如,可以使用
MySQL和MySQLdump來更改客戶端的max_allowed_packet值.
其實你的兩種方案都可以,第二種也挺好的,以前我一般都用方案一那種,都存到數據庫里,我沒有測試過超長字符串存到數據庫中的查詢效率,和內存問題,不過你也可以這兩種方案都用,過大的就存文件,小的就存數據庫,用個字段做標識就行
char: 是定長格式的,長度范圍是0~255. 想要儲存一個長度不足255的字符時,MySQL會用空格來填充剩下的字符。因此在讀取數據時,char類型的數據要進行處理,把后面的空格去除。
朋友,據我所知varchar字段類型已經夠用了,char類型其長度是固定的,在創建表時就指定了,
但是varchar類型的長度是可變的,在建表的時候就制定了最大長度,其最大值可以取:0~65535之間的任意值(長度可以再0到最大值之間) 而且在這個最大范圍內,使用多少則分配多大的空間,例如varchar(100),并不是每條記錄都要占用100個字節哦!! 最后強調:varchar類型實際占用的空間為字符串的實際長度加1 如varchar(10):字段 ‘123’,他占的內存字節是4(3+1),而char(10)則占用了10個字節。 全手工,希望朋友采納
對于大篇幅的文本字段,一般推薦用text和blob數據類型定義字段, 有時候不必在于一點空間的消耗,只要我們在數據庫優化做好就夠了