4 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
您好,沒記錯(cuò)的話,mysql以4.1版本為界限,之前的varchar以字節(jié)計(jì)算大小,之后的varchar以字符計(jì)算大?。ㄒ粋€(gè)漢字也計(jì)算為1)。
類似的,在Java中,字符串的長(zhǎng)度也是字符相關(guān)的,如:
// 輸出字符個(gè)數(shù)為4
System.out.println("你好hi".length());
因此如果你要將字符串結(jié)為1300長(zhǎng)度,只需要如下代碼:
String origin = "這是原始的字符串,bala bala bala";
// 如果長(zhǎng)度大于1300,就截取, 否則使用全部字符
String newStr = origin.substring(0, origin.length() > 1300 ? 1300 : origin.length());
System.out.println(newStr);

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
1300
表示字符
。
Java: "1300len...".length()
大于1300
時(shí)會(huì)出現(xiàn)Data too long...
可以將數(shù)據(jù)庫字段改短一時(shí),寫點(diǎn)數(shù)據(jù)試一下就明了了。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
這個(gè)要看你用的什么數(shù)據(jù)庫,我看你標(biāo)簽是mysql
,所以此處以mysql為例。
在4.0以前
varchar(n)中的n表示字節(jié)數(shù)
,即需要自行計(jì)算。這和你使用的編碼方式有關(guān):unicode
編碼中不論中英文,統(tǒng)一兩個(gè)字節(jié)。即能存放n/2個(gè)字符。utf-8
編碼中英文為1個(gè)字節(jié),中文占用3個(gè)字節(jié)。即能存放x+3y=n,x+y個(gè)字符。
在4.0以后
由于這種方式雖然方便了底層運(yùn)算,但在使用起來非常不方便,所以4.0以后的n代表字符個(gè)數(shù)。
即varchar(1300)
能存放1300個(gè)漢字或字母或數(shù)字。由mysql底層換算成字節(jié)。
但是,換算后的字節(jié)依然不能超過最大個(gè)數(shù)0xffff
個(gè),否則會(huì)自動(dòng)轉(zhuǎn)換成text
型。
添加回答
舉報(bào)