真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL中varchar的大小寫(xiě)字符比較

這篇文章主要介紹“MySQL中varchar的大小寫(xiě)字符比較”,在日常操作中,相信很多人在MySQL中varchar的大小寫(xiě)字符比較問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”MySQL中varchar的大小寫(xiě)字符比較”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)與策劃設(shè)計(jì),潘集網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:潘集等地區(qū)。潘集做網(wǎng)站價(jià)格咨詢:028-86922220


背景:
程序某日提出的SQL問(wèn)題, 發(fā)現(xiàn)比較varchar字符串內(nèi)容的時(shí)候, 大小寫(xiě)不敏感;
測(cè)試環(huán)境還原問(wèn)題, 環(huán)境構(gòu)造如下:

  1. create table case_sen(id int primary key, name varchar(32)notnull);

  2. insert into case_sen values(1,'LucyLoveLily');

  3. insert into case_sen values(2,'lucylovelily');

  4. insert into case_sen values(3,'TomHateLarry');

  5. insert into case_sen values(4,'tomhatelarry');


效果如下:
MySQL中varchar的大小寫(xiě)字符比較

實(shí)際上程序希望只有id=1的匹配到,  
同樣的問(wèn)題也出現(xiàn)在like里面:
MySQL中varchar的大小寫(xiě)字符比較

程序有問(wèn)是不是lower_case_table_names的問(wèn)題, 顯然.........不是 _(:з」∠)_

場(chǎng)景:
MySQL-5.7進(jìn)行的還原, 實(shí)際上這個(gè)問(wèn)題和版本沒(méi)有關(guān)系;


分析:
首先可以確認(rèn)的是, 表內(nèi)的數(shù)據(jù)并沒(méi)有問(wèn)題, 該大寫(xiě)的還是大寫(xiě), 該小寫(xiě)的還是小寫(xiě);

那么問(wèn)題最有可能出在MySQL的運(yùn)算符"="和like上, 這兩類運(yùn)算的原理可能因?yàn)槟承┰?設(shè)置/導(dǎo)致不進(jìn)行大小寫(xiě)區(qū)分;

排查方向定下來(lái)以后, 試著用關(guān)鍵字comparison, case sensitive在文檔里面找找, 發(fā)現(xiàn)有一個(gè)章節(jié)提到了這個(gè)問(wèn)題,并給出了一些示例;
PS: 章節(jié)名  B.5.4.1 Case Sensitivity in String Searches

文檔示例如圖:
MySQL中varchar的大小寫(xiě)字符比較

對(duì)文檔的描述進(jìn)行歸納:  非binary類型的string進(jìn)行邏輯運(yùn)算時(shí), 會(huì)依據(jù)collate的配置來(lái)計(jì)算結(jié)果;

所以如果collate的設(shè)置對(duì)大小寫(xiě)不敏感, 那么就會(huì)出現(xiàn)測(cè)試環(huán)境中的效果;

那么問(wèn)題來(lái)了, utf8mb4的默認(rèn)collate是什么?
MySQL中varchar的大小寫(xiě)字符比較

發(fā)現(xiàn)是utf8mb4_general_ci, 通過(guò)對(duì)文檔內(nèi)容的分析, 這個(gè)后綴ci代表的意思應(yīng)該就是case-insensitive ;

那么試著換一下字符集的collate, 看看是不是能區(qū)分大小寫(xiě);
MySQL中varchar的大小寫(xiě)字符比較

Bingo~~~

當(dāng)然, 在列上面指定collate為utf8mb4_bin也可以達(dá)到一樣的目的;

PS: mysql的所有字符集默認(rèn)都使用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ò) ╰(*°▽°*)╯
MySQL中varchar的大小寫(xiě)字符比較

到此,關(guān)于“MySQL中varchar的大小寫(xiě)字符比較”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


網(wǎng)頁(yè)名稱:MySQL中varchar的大小寫(xiě)字符比較
網(wǎng)站鏈接:http://weahome.cn/article/ijhodh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部