解析MySQL動態(tài)更改varchar長度的方法
發(fā)表時間:2023-09-02 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]雖然這種情況不應(yīng)該發(fā)生,通常像我們關(guān)系型數(shù)據(jù)庫,我們應(yīng)該是事先設(shè)計好,以后不能改動,但是由于之前工作的疏忽,其實說實話,也不僅僅是我個人的疏忽,主要是溝通上的原因,當然數(shù)據(jù)庫畢竟是我設(shè)計的,所以,還是自我批評一下。說一下情況:MySQL字段有個varchar值字段設(shè)置的太短了,設(shè)置了30個,(我依...
雖然這種情況不應(yīng)該發(fā)生,通常像我們關(guān)系型數(shù)據(jù)庫,我們應(yīng)該是事先設(shè)計好,以后不能改動,但是由于之前工作的疏忽,其實說實話,也不僅僅是我個人的疏忽,主要是溝通上的原因,當然數(shù)據(jù)庫畢竟是我設(shè)計的,所以,還是自我批評一下。
說一下情況:MySQL字段有個varchar值字段設(shè)置的太短了,設(shè)置了30個,(我依稀記得varchar是可擴展的,當然現(xiàn)實并不容忍我的依。,所以我只能找一個方法在保證數(shù)據(jù)庫數(shù)據(jù)不變的情況下,動態(tài)修改varchar字段的長度,找了一段時間,終于讓我找到了。
alter table 表名 modify column 字段名 varchar(數(shù)量);
這個功能還是比較強大的,但是還是提醒大家最好設(shè)計的時候就不要出現(xiàn)這種問題啊。
PS:mysql中的設(shè)置varchar長度問題
如果某一項中設(shè)置的是varchar(50)
那么對英文當然是50
那么對中文呢
utf-8的中文占3個字節(jié)
那么,這個varchar(50)是不是只能存16個漢字了?
mysql varchar(50) 不管中文 還是英文 都是存50個的
MySQL5的文檔,其中對varchar字段類型這樣描述:varchar(m) 變長字符串。M 表示最大列長度。M的范圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,最大有效長度是65,532字節(jié))。
為何會這般變換?真是感覺MySQL的手冊做的太不友好了,因為你要仔細的繼續(xù)往下讀才會發(fā)現(xiàn)這段描述:MySQL 5.1遵從標準SQL規(guī)范,并且不刪除VARCHAR值的尾部空格。VARCHAR保存時用一個字節(jié)或兩個字節(jié)長的前綴+數(shù)據(jù)。如果VARCHAR列聲明的長度大于255,長度前綴是兩個字節(jié)。
好了,貌似懂了一點。但具體他說的長度大于255時使用2個字節(jié)長度前綴,小學(xué)減法題:65535 - 2 = 65533啊。不知道這些大牛如何計算的,暫且保留疑問吧?
注:我測試了一下使用UTF8編碼,varchar的最大長度為21854字節(jié)。
在mysql 5.0.45版本,數(shù)據(jù)庫編碼utf8下進行測試:varchar最長定義為21785。也就是說不論字母、數(shù)字、漢字,只能放21785個。
推想:varchar字節(jié)最大65535,utf8編碼一個字符3個字節(jié)65535/3=21785。
以上就是解析MySQL動態(tài)修改varchar長度的方法 的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。