mysql中varbinary、binary、char、varchar異同


binary 與 varbinary 類型和char與varchar類型是相似的,只是他們存儲的是二進制數據,也就是說他們是包含字節流而不是字符流,他們有二進制字符的集合和順序,他們的對比,排序是基於字節的數值進行的

  binary與varbinary的最大長度和char與varchar是一樣的,只不過他們是定義字節長度,而char和varchar對應的是字符長度。

 

 

存儲和取出時對尾部空格的處理

  char(N)用來存儲非二進制字符串,插入時,對於少於N個字符的會自動在尾部加空格,查詢時,尾部的空格就會被丟棄掉

  vachar(N) 用來存儲非二進制字符串,插入時,對於少於N個字符的不填補空格,查詢時,尾部的空格不會被丟棄掉

  binary(N)存儲二進制字符串,插入進,少於N個字節的會自動在尾部加0x00,取出時,所有的字節都保留,返回定義長度的字節長度,在比較的時候,所有的字節都是有效的,並且0x00<space (space對應的是0x20)

  varbinary在插入不會去填補0x00字節,查詢的時候也不會丟棄任何字節,在比較的時候,所有的字節都是有效的,並且0x00<space (space對應的是0x20)

 

 

大小比較時

  char與varchar的字符比較中,是忽略大小寫與最后的空格的,如:

  mysql> select 'a'='a ' , 'a'='A' , 'a'='A ';

  +----------+---------+----------+

  | 'a'='a ' | 'a'='A' | 'a'='A ' |

  +----------+---------+----------+

  |        1 |       1 |        1 |

  +----------+---------+----------+

  1 row in set (0.00 sec)

 

   而binary及varbinary的字節比較中,所有的信息都不會被忽略,如:

  mysql> CREATE TABLE t (c BINARY(3));
  Query OK, 0 rows affected (0.01 sec)
 
  mysql> INSERT INTO t SET c = 'a';
  Query OK, 1 row affected (0.01 sec)
 
  mysql> SELECT HEX(c), c = 'a', c = 'a\0\0' from t;
  +--------+---------+-------------+
  | HEX(c) | c = 'a' | c = 'a\0\0' |
  +--------+---------+-------------+
  | 610000 |       0 |           1 |
  +--------+---------+-------------+
  1 row in set (0.08 sec)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM