[ZZ] MYSQL的binary什麼意義

 BINARY不是函數,是類型轉換運算符,它用來強制它後面的字符串爲一個二進制字符串,可以理解爲在字符串比較的時候區分大小寫
如下:
mysql> select binary 'ABCD'='abcd' COM1, 'ABCD'='abcd' COM2;
+--------+-----------+
| COM1 | COM2 |
+--------+-----------+
|      0     |      1      |
+---------+-----------+
1 row in set (0.00 sec)

____________________________________________________________
(僅僅有些而已!4.*以前)

因爲有的MySQL特別是4.*以前的對於中文檢索會有不準確的問題,可以在檢索的時候加上binary。

建表:

create TABLE usertest (
id int(9) unsigned NOT NULL auto_increment,
username varchar(30) NOT NULL default '',
primary key (id)
)
插入數據:

insert into usertest (username) VALUES('美文');
insert into usertest (username) VALUES('美國項目');
insert into usertest (username) VALUES('李文');
insert into usertest (username) VALUES('老唐');
insert into usertest (username) VALUES('夢漂');
insert into usertest (username) VALUES('龍武');
insert into usertest (username) VALUES('夏');

例如:select * from usertest where username like '%夏%' ,結果七條記錄都出來了,比較鬱悶。

如果使用=而不是like的時候,select * from usertest where username = '夏' ,只出現一個結果。因爲mysql 的LIKE操作是按照ASCII 操作的,所以LIKE的時候是可能有問題的。問題繼續:如果再加上:

insert into usertest (username) VALUES('文');

insert into usertest (username) VALUES('唐'); 

還是使用select * from usertest where username = '夏' ,結果還是出現3條記錄,又鬱悶了。解決辦法如下:

1.在create的時候就使用binary,而不是在query的時候加。

username varchar(30) BINARY NOT NULL default '', 如果表已經建好了,使用:

alter table usertest modify username varchar(32) binary; 來就該表的屬性。

2.在query的時候加上binary,select * from usertest where username like binary  '%夏%' ,就可以準確的查詢出一條記錄來。

文章來源:http://blog.china.alibaba.com/blog/wtjxn/article/b0-i1573742.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章