這篇文章主要介紹“中varchar的大小寫(xiě)字符比較”,在日常操作中,相信很多人在MySQL中varchar的大小寫(xiě)字符比較問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對大家解答”MySQL中varchar的大小寫(xiě)字符比較”的疑惑有所幫助!接下來(lái),請跟著(zhù)小編一起來(lái)學(xué)習吧!
背景:
程序某日提出的SQL問(wèn)題, 發(fā)現比較varchar字符串內容的時(shí)候, 大小寫(xiě)不敏感;
測試環(huán)境還原問(wèn)題, 環(huán)境構造如下:
create table case_sen(id int primary key, name varchar(32)notnull);
insert into case_sen values(1,'LucyLoveLily');
insert into case_sen values(2,'lucylovelily');
insert into case_sen values(3,'TomHateLarry');
insert into case_sen values(4,'tomhatelarry');
效果如下:
實(shí)際上程序希望只有id=1的匹配到,
同樣的問(wèn)題也出現在like里面:
程序有問(wèn)是不是lower_case_table_names的問(wèn)題, 顯然.........不是 _(:з」∠)_
場(chǎng)景:
MySQL-5.7進(jìn)行的還原, 實(shí)際上這個(gè)問(wèn)題和版本沒(méi)有關(guān)系;
分析:
首先可以確認的是, 表內的數據并沒(méi)有問(wèn)題, 該大寫(xiě)的還是大寫(xiě), 該小寫(xiě)的還是小寫(xiě);
那么問(wèn)題最有可能出在MySQL的運算符"="和like上, 這兩類(lèi)運算的原理可能因為某些原因/設置/導致不進(jìn)行大小寫(xiě)區分;
排查方向定下來(lái)以后, 試著(zhù)用關(guān)鍵字comparison, case sensitive在文檔里面找找, 發(fā)現有一個(gè)章節提到了這個(gè)問(wèn)題,并給出了一些示例;
PS: 章節名 B.5.4.1 Case Sensitivity in String Searches
文檔示例如圖:
對文檔的描述進(jìn)行歸納: 非binary類(lèi)型的string進(jìn)行邏輯運算時(shí), 會(huì )依據collate的配置來(lái)計算結果;
所以如果collate的設置對大小寫(xiě)不敏感, 那么就會(huì )出現測試環(huán)境中的效果;
那么問(wèn)題來(lái)了, utf8mb4的默認collate是什么?
發(fā)現是utf8mb4_general_ci, 通過(guò)對文檔內容的分析, 這個(gè)后綴ci代表的意思應該就是case-insensitive ;
那么試著(zhù)換一下字符集的collate, 看看是不是能區分大小寫(xiě);
Bingo~~~
當然, 在列上面指定collate為utf8mb4_bin也可以達到一樣的目的;
PS: mysql的所有字符集默認都使用XXX_general_ci, 而有的字符集會(huì )有XXX_general_cs, 但是utf8是沒(méi)有的, 所以要使用utf8_bin;
PPS: 興趣閱讀: https://www.percona.com/live/europe-amsterdam-2015/sites/default/files/slides/PL_AMS_Unicode_Booking169_v3.pdf
PS: 注意索引喲, 5.7是可以的, <5.7可沒(méi)有試過(guò) ╰(*°▽°*)╯
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站