mysql5.0.3之前varchar(n)這裡的n表示位元組數
mysql5.0.3之後varchar(n)這裡的n表示字元數,比如varchar(200),不管是英文還是中文都可以存放200個
(注:這兩個是完全不一樣的單位,位元組表示字元佔的多少k,字元表示乙個完整的字元)
mysql要求乙個行定義長度不能超過65535個位元組,不包括text、blob等大字段型別,varchar長度受此長度限制,和其他非大字段加起來不能超過65535個位元組.
超過以上限制則會報錯
varchar(n)占用幾個位元組跟字符集有關係:
字元型別若為gbk,每個字元占用2個位元組,
字元型別若為utf8,每個字元最多占用3個位元組
根據字符集,字元型別若為gbk,每個字元占用2個位元組,最大長度不能超過65535/2 =32766; 字元型別若為utf8,每個字元最多占用3個位元組,最大長度不能超過 65535/3 =21845,若超過這個限制,則會自動將varchar型別轉為mediumtext或longtext,例如:
drop table if exists test1111;
create table test1111(
id char(255) null,
content varchar(63000) null
);
desc test1111;
結果:
create table `test1111` (
`id` char(255) default null,
`content` mediumtext
) engine=innodb default charset=utf8;
mysql 查詢varchar型別字段排序
首先,如果裡面存的是字母,會按 英文本母 順序排序,如果含有數字,按數字大小排序,如果含有漢字,按照所選擇的 漢字編碼 排序。一般情況下,int型別的字段可以直接使用max 函式查詢出某一列的最大值,但是對於varchar型的字段,我們有的時候需要排序或查最大值,直接用max 函式查最大值,會發現值...
Mysql中萬能的varchar欄位
很久以前,就見過乙個架構師設計資料庫時所有欄位都使用varchar型別,當時以為方便儲存和遷移,今天自己在設計欄位的時候想起了這件事情,就驗證了一下,mysql中的varchar型別,差不多能算是個萬能型別。例如 1.需要設計乙個datetime欄位型別,方便以後按時間檢索,這時可以使用varcha...
MySQL中欄位varchar和int排序的區別
首先我們建立乙個簡單的資料表,這個表只有兩個字段,id和a,a欄位的型別是int型別。我先的需求是對a欄位進行正序排列 select from test order by a asc 這個時候我們得到了想要的資料,如下圖 可是小童鞋,將a欄位建成了varchar型別,這個時候我們正序查詢,結果如下圖...