(1).索引字段的附加信息:可以分為變長和定長數據類型。當索引字段為定長數據類型,比如char,int,datetime,需要有是否為空的標記,這個標記需要占用1個字節;對於變長數據類型,比如:varchar,除了是否為空的標記外,還需要有長度信息,需要占用2個字節(所以變長的數據類型總共需要三個字節的額外信息);(備注:當字段定義為非空的時候,是否為空的標記將不占用字節)
(2).同時還需要考慮表所使用的字符集,不同的字符集,gbk編碼的為一個字符2個字節,utf8編碼的一個字符3個字節;


MYSQL的字符集包括字符集(CHARACTER)和校對規則(COLLATION),字符集用來定義MYSQL存儲字符串的方式,校對規則用來定義比較字符串的方式。字符集和校對規則是一對多的關系,每個字符集都至少有一個校對規則(默認校對規則)。
可以使用show collation like 'utf8'查看字符集的校對規則

校對規則的命名:字符集的名稱+語言名+後綴。 後綴_ci表示大小寫不敏感,_cs表示大小寫敏感,_bin表示比較是基於字符編碼的值而與language無關。
當沒有設定編碼集的時候,默認使用latin1作為服務器編碼集。當在/etc/my.cnf文件中mysqld下面添加character_set_server = utf8後,重啟mysql服務,再次執行命令。 
數據庫的字符集和校對規則是在創建數據庫的時候指定,也可以在創建數據庫之後使用alter database進行修改。但是注意: 如果數據庫中已經存在數據,因為修改字符集並不能將已有的數據按照新的字符集進行存放,所以不能修改數據庫的字符集直接修改數據的內容。 數據庫的字符集和校對規則: show variables like 'character_set_database' 
數據庫沒有指定字符集和校對規則,則使用MYSQL服務的字符集和該字符集默認的校對規則。也可以使用 create database character_set2 charset gbk collate gbk_chinese_ci來指定字符集和校對規則。
