說明
有次給前端返回code值時,code后多了許多空字符沟优,造成了編碼不匹配的問題涕滋,之后發(fā)現(xiàn)是數(shù)據(jù)庫字段設(shè)置的有問題。當時設(shè)置的CHAR類型挠阁,當存儲的數(shù)據(jù)字節(jié)長度小于定義的長度時宾肺,不足的部分會補成空字符。
解決方案
- code值定長時侵俗,CHAR類型長度設(shè)置為跟code長度一致锨用,否則會有空字符。
- code若會變化隘谣,改用VARCHAR或者VARCHAR類型存儲數(shù)據(jù)增拥,它們是長度可變的,不會有空字符問題寻歧,但效率比CHAR略低掌栅。
char varchar varchar2 的區(qū)別
參考:
https://wenku.baidu.com/view/3bc91b28cfc789eb172dc8c9.html
CHAR長度固定,是n個字節(jié)且非Unicode的字符數(shù)據(jù)码泛,n介于1到8000之間猾封。如定義CHAR(20),存儲"abc"字符串噪珊,那么存儲的字符會占用固定的20個字節(jié)(abc加17個空字符)晌缘。
VARCHAR長度可變逾苫,是n個字節(jié)且非Unicode的字符數(shù)據(jù),n介于1到8000之間枚钓。存儲大小為輸入數(shù)據(jù)的字節(jié)的實際長度铅搓。如定義VARCHAR(20),存儲"abc"字符串搀捷,那么存儲的字符會占用3個字節(jié)星掰,即按照實際長度存儲。定義的20是最大長度嫩舟,在此之內(nèi)長度可變氢烘。