1、 binary和char比較:mysql
相同特性,摘自官方文檔:git
Specifying the CHARACTER SET binary attribute for a character data type causes the columnsql
to be created as the corresponding binary data type: CHAR becomes BINARY, VARCHAR becomes VARBINARY , and TEXT becomes BLOB . For the ENUM and SET data types, this does not occur;函數
如下兩種表定義是等義的:sqlserver
CREATE TABLE t測試
(ui
c1 VARCHAR(10) CHARACTER SET binary,this
c2 TEXT CHARACTER SET binary,編碼
c3 ENUM('a','b','c') CHARACTER SET binaryspa
);
CREATE TABLE t
(
c1 VARBINARY(10),
c2 BLOB,
c3 ENUM('a','b','c') CHARACTER SET binary
);
佔用空間比較,測試uuid在不一樣字符集下的佔用空間,主要是考慮到uuid是否適合業務主鍵的問題
建立4個表,第一個表是utf8字符集比較規則是utf8_bin
mysql> create table tc1(synid char(36) character set utf8 collate utf8_bin);
Query OK, 0 rows affected (0.07 sec)
mysql> create table tc2(synid char(36) character set utf8 collate utf8_general_ci);
Query OK, 0 rows affected (0.08 sec)
mysql> create table tc3(synid char(36) character set binary);
Query OK, 0 rows affected (0.06 sec)
mysql> create table tc4(synid binary(36));
Query OK, 0 rows affected (0.11 sec)
插入相同的數據1000條數據,表大小相同:
mysql> SELECT table_name,SUM(data_length) AS data_length
-> FROM information_schema.TABLES WHERE
-> table_name IN ('tc1','tc2','tc3','tc4')
-> GROUP BY table_name;
+------------+----------------+
| table_name | data_length |
+------------+----------------+
| tc1 | 1589248 |
| tc2 | 1589248 |
| tc3 | 1589248 |
| tc4 | 1589248 |
+------------+----------------+
4 rows in set (0.00 sec)
對於相同的緣由主要有兩方面:
當時測試以上問題主要是爲了討論uuid適不適合作業務主鍵,如下是個人一些總結:
2、 char和varchar
注意:須要注意的是,varchar顯示是不截斷尾部空格的,但在比較的時候忽略空格的,此外varchar存儲時會去掉尾部空格,若是該字段被定義成惟一建或主鍵,去除結尾空格後相同的字符串會違反惟一性約束
3、 binary和vbinary
注意:一樣,vbinary在須要注意在存儲時去掉尾部\0,若是該字段被定義成惟一建或主鍵,去除結尾\0後相同的字符串會違反惟一性約束