Category: "MySQL, Oracle, 數據庫" , Tags: binary, MySQL, varchar, 大寫小寫, 大小寫不敏感
是Shacho.
我會接二連三地寫哦!
今天的內容也是面向MySQL初學者的秘訣.
這個秘訣是MySQL自身在文件裏談到的規格, 可是好像Oracle技師覺得這是不可能的. 很多人沒想到這是選項之一.
不過, 規格是規格, 沒辦法, 是不是?如果你看看他們的正式文件, 這是很明顯的. 可是我看很多人不讀這文件.
這是可以理解的. (反正, 你應該讀以下)
第2: 在varchar類型列裡沒有大小寫的分別 (搜索時的大小不敏感性)
這是大家總是問我的.
MySQL文件叫它”搜索時的大小寫敏感性” (Case Sensitivity in Searches).
由於這是太常見的問題, 我不想主動地提到這件事,
但大概開始測試的時候,
很多人問我”我在WHERE字句裡寫的字符串跟大寫的和小寫的都一致, 嗯, 難道MySQL不分別大小寫嗎?”
問得好像我是設計的人.
“請你添加binary屬性.”
char類型的也是一樣.
要是你要創建新的
Create Table 表名(列名 varchar(n) BINARY);
不能重新創建的話
Alter Table 表名 MODIFY 列名 varchar(n) BINARY;
以下為Oracle技師列舉了幾個例子.
– 以col1附加binary屬性, col2保留默認值, 創建表
mysql> Create Table tab1 (col1 varchar(10) BINARY, col2 varchar(10));
Query OK, 0 rows affected (0.19 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tab1 |
+----------------+
1 rows in set (0.00 sec)
– 選擇全部
mysql> select * from tab1;
+------+------+
| col1 | col2 |
+------+------+
| aaa | BBB |
+------+------+
1 row in set (0.00 sec)
– 留意大小寫, 附條件搜索col1(添加了binary屬性的)
mysql> select * from tab1 where col1 = 'AAA';
Empty set (0.00 sec)
– 取得了0個. Oracle技師期待的結果是這樣的.
– 接著, 留意大小寫, 附條件搜索col2(沒添加binary屬性的)
mysql> select * from tab1 where col2 = 'bbb';
+------+------+
| col1 | col2 |
+------+------+
| aaa | BBB |
+------+------+
1 row in set (0.00 sec)
– 取得了1個
– 但是, 表裡字符串的大小寫和條件裡的大小寫不一致
– 這是一個理由Oracle技師說 “MySQL不好用”
– 這是沒辦法的, 所以用Alter Table來添加binary屬性
mysql> Alter Table tab1 MODIFY col2 varchar(10) BINARY;
Query OK, 1 row affected (0.48 sec)
Records: 1 Duplicates: 0 Warnings: 0
– 再次照以上的條件搜索
mysql> select * from tab1 where col2 = 'bbb';
Empty set (0.00 sec)
– 這就是你所期待的結果啵?(用日本小酒館服務員的口氣問問…)
話說回來, 如果你要認識添加binary屬性時和沒添加時, MySQL裡的Create Table SQL是怎麼樣的, 用 “show create table 表名” 看看.
這會給你看看MySQL本來的SQL是怎麼樣的.


