雖然這種情況不應該發生,通常像我們關係型資料庫,我們應該事先設計好,以後不能改動,但是由於之前工作的疏忽,其實說實話,也不只是我個人的疏忽,主要是溝通上的原因,當然資料庫畢竟是我設計的,所以,還是自我批評一下。
說一下情況:MySQL欄位有個varchar值欄位設定的太短了,設定了30個,(我依稀記得varchar是可擴充的,當然現實並不容忍我的依稀),所以我只能找一個方法在保證資料庫資料不變的情況下,動態修改varchar欄位的長度,找了一段時間,終於讓我找到了。
alter table 表名 modify column 字段名 varchar(数量);
這個功能還是比較強大的,但是還是提醒大家最好設計的時候就不要出現這種問題啊。
PS:mysql中的設定varchar長度問題
如果某一項中設定的是varchar(50)
那麼對英文當然是50
那麼對中文呢
utf-8的中文佔3個位元組
那麼,這個varchar(50)是不是只能存16個漢字了?
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個。
推想:varchar位元組最大65535,utf8編碼一個字元3個位元組65535/3=21785。
以上是解析MySQL動態修改varchar長度的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!