亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

MySQL大小寫敏感的解決方案

張軍 3743 0

前言:對(duì)于MySQL的大小寫敏感的影響,筆者在一個(gè)小項(xiàng)目中深刻的體會(huì)到:當(dāng)想要查詢一條數(shù)據(jù)時(shí),總是出來兩條或多條,后來發(fā)現(xiàn)是大小寫敏感造成的原因,本文就該問題提出解決方案。


1.MySQL大小寫敏感的控制

mysql是通過lower_case_table_names參數(shù)來控制大小寫敏感的,該參數(shù)在[mysqld]結(jié)點(diǎn)下。具體的含義筆者從官網(wǎng)截了一張圖。

注:

①關(guān)于lower_case_table_names參數(shù)對(duì)表名稱或數(shù)據(jù)庫名稱大小寫敏感的控制。

②Unix下默認(rèn)為0,也就是大小寫敏感的;Windows下默認(rèn)為1,不敏感;macOS默認(rèn)為2,存儲(chǔ)區(qū)分大小寫,但是在查詢時(shí)會(huì)轉(zhuǎn)換為小寫。

③對(duì)于在大小寫不敏感的系統(tǒng)(Windows和macOS)不能將該字段設(shè)置為0。

[mysqld]下配置

lower_case_file_system

表示當(dāng)前系統(tǒng)文件是否大小寫敏感,只讀參數(shù),無法修改。

ON  大小寫不敏感
OFF 大小寫敏感

lower_case_table_names

表示表名是否大小寫敏感,可以修改。

lower_case_table_names = 0時(shí),mysql會(huì)根據(jù)表名直接操作,大小寫敏感。
lower_case_table_names = 1時(shí),mysql會(huì)先把表名轉(zhuǎn)為小寫,再執(zhí)行操作。

2.出現(xiàn)的問題

#1.Linux下默認(rèn)lower_case_table_names=0,對(duì)表名的大小寫是敏感的。注:筆者數(shù)據(jù)版本為5.7.22。

注:lower_case_file_system:OFF表示大小寫敏感,ON表示大小寫不敏感。lower_case_table_names:0表示敏感,1表示不敏感。

#2.具體演示。

注:創(chuàng)建test表,并插入一條數(shù)據(jù)。

Case 1:

分析:

對(duì)比兩組查詢,可以知linux下,mysql默認(rèn)對(duì)表名大小寫敏感。

Case 2:

分析:

利用‘Aa’和‘a(chǎn)a’查詢出相同的結(jié)果,說明查詢時(shí)對(duì)字段內(nèi)容進(jìn)行了轉(zhuǎn)換(大寫轉(zhuǎn)換成小寫),造成了這一現(xiàn)象。

Case 3:

分析:

在查詢時(shí),對(duì)字段‘Name'也可查詢結(jié)果,表明在查詢時(shí)對(duì)字段的大小寫不敏感。

綜合以上幾個(gè)Case可得出如下結(jié)論:

①linux默認(rèn)情況下,對(duì)數(shù)據(jù)庫名和表名的大小寫是敏感的,因?yàn)閘inux系統(tǒng)本身對(duì)大小寫就敏感。

字段內(nèi)容大小寫不敏感。

列名大小寫不敏感。

對(duì)于上述出現(xiàn)的問題,對(duì)實(shí)際的業(yè)務(wù)還是有相應(yīng)影響的,因此應(yīng)尋找對(duì)應(yīng)的解決方案。

3.字段內(nèi)容及列名大小寫不敏感的解決方案

①創(chuàng)建表時(shí),將字段標(biāo)記為binary,二進(jìn)制大小寫是敏感的。

②在查詢條件的字段前加binary,但是不建議這么做,因?yàn)闀?huì)使字段索引失效。

③建表時(shí)設(shè)置校對(duì)規(guī)則(collate)。

collate規(guī)則:

         *_bin: 表示的是binary case sensitive collation,也就是說是區(qū)分大小寫
         *_ci: case insensitive collation,不區(qū)分大小寫 。

④如果建表時(shí)校對(duì)規(guī)則未用*_bin,則可直接修改字段的屬性

alter table test3 modify name varchar(20) collate utf8_bin;

總結(jié)

只要在創(chuàng)建表的時(shí)候指定collate為utf8_bin,就可以實(shí)現(xiàn)大小寫敏感,如果建表時(shí)未指定,則可修改字段的校對(duì)規(guī)則,也可以實(shí)現(xiàn)大小寫敏感。

操作系統(tǒng)不同導(dǎo)致大小寫敏感不一致。我們?cè)陂_發(fā)時(shí),應(yīng)該按大小寫敏感的原則去開發(fā),這樣可以使開發(fā)的程序兼容不同的操作系統(tǒng)。因此,建議在開發(fā)測試環(huán)境下把lower_case_table_names的值設(shè)為0,便于在開發(fā)中就嚴(yán)格控制代碼大小寫敏感,提高代碼的兼容和嚴(yán)謹(jǐn)。

=========================================================


比你優(yōu)秀的人比你還努力,你有什么資格不去奮斗!

__一個(gè)有理想的程序員。

=========================================================


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美深度肠交惨叫 | 日韩一区二区视频 | 精品久久成人 | 日韩欧美伦理 | 成人 日韩 在线 | 精品国产看高清国产毛片 | 亚洲精品视频久久 | 欧美香蕉视频在线观看 | www操操| 免费国产之a视频 | 日本一级淫片a免费播放 | 亚洲欧美日韩中文字幕在线一 | 中国国产一国产一级毛片视频 | 亚洲一区二区在线 | 久久亚洲国产精品五月天婷 | 欧美极品妇xxxxxbbbbb | 久久久久女人精品毛片 | 国产成人午夜 | 夜夜躁日日躁狠狠久久 | 国产精品香蕉在线观看不卡 | 四虎影音在线观看 | 色综合久久久久综合体桃花网 | 日批视频网址免费观看 | 精品国产欧美 | 日本精品一区二区三区视频 | 久九精品| 色综合合久久天天综合绕视看 | 色老头老太xxxxbbbb | 亚洲精品一区二区手机在线 | 欧美日韩北条麻妃一区二区 | www.久久精品 | 色婷婷777| 91久久亚洲国产成人精品性色 | 青青青爽在线视频观看 | 精品一区二区久久久久久久网精 | 国产日本久久久久久久久婷婷 | 精品免费视在线观看 | 久久久久激情免费观看 | 大学生不戴套毛片视频 | 免费播放国产一级 | 曰鲁夜鲁鲁狠狠综合 |