日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

numeric比较大小 数据库_mysql大小写敏感与校对规则

發布時間:2025/3/20 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numeric比较大小 数据库_mysql大小写敏感与校对规则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正文

大家在使用mysql過程中,可能會遇到類似以下的問題:

模糊匹配 jg%,結果以JG開頭的字符串也出現在結果集中,大家很自然的認為是大小寫敏感的問題。那么mysql中大小寫敏感是如何控制的;數據庫名,表名,字段名這些字典對象以及字段值的大小敏感是如何控制的;以及校驗規則與索引的關系,這是本文要討論的內容。

數據庫名、表名:

windows建庫:

windows建表:

linux建庫:

linux建表:

以上可以看出windows下大小寫不敏感,linux下是敏感的,故前者不可以同時建test和TEST,而后者可以。

大小寫區分規則:

Linux下:

  • 數據庫名與表名是嚴格區分大小寫的;
    • 表的別名是嚴格區分大小寫的;
    • 列名與列的別名在所有的情況下均是忽略大小寫的;
  • 變量名也是嚴格區分大小寫的;

Windows下:

  • 都不區分大小寫。

Mac OS下,文件系統類型HFS+,非UFS卷:

  • 都不區分大小寫。

mysql中控制數據庫名和表名的大小寫敏感由參數lowercasetable_names控制,為0時表示區分大小寫,為1時,表示將名字轉化為小寫后存儲,不區分大小寫。

在mysql中,數據庫對應數據目錄中的目錄。數據庫中的每個表至少對應數據庫目錄中的一個文件(也可能是多個,取決于存儲引擎)。因此,所使用操作系統的大小寫敏感性決定了數據庫名和表名的大小寫敏感性。

lowercasefile_system:

變量說明是否數據目錄所在的文件系統對文件名的大小寫敏感。ON說明對文件名的大小寫不敏感,OFF表示敏感。

lowercasetable_names:

unix下默認值為 0 ;Windows下默認值是 1 ;Mac OS X下默認值是 2

*0:*使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母在硬盤上保存表名和數據庫名。名稱比較對大小寫敏感。在大小寫不敏感的操作系統如windows或Mac OS x上我們不能將該參數設為0,如果在大小寫不敏感的文件系統上將此參數強制設為0,并且使用不同的大小寫訪問MyISAM表名,可能會導致索引破壞。

*1:*表名在硬盤上以小寫保存,名稱比較對大小寫不敏感。MySQL將所有表名轉換為小寫在存儲和查找表上。該行為也適合數據庫名和表的別名。該值為Windows的默認值。

*2:*表名和數據庫名在硬盤上使用CREATE TABLE或CREATE DATABASE語句指定的大小寫字母進行保存,但MySQL將它們轉換為小寫在查找表上。名稱比較對大小寫不敏感,即按照大小寫來保存,按照小寫來比較。注釋:只在對大小寫不敏感的文件系統上適用innodb表名用小寫保存。

windows上:

linux上:

為了避免大小寫引發的問題,一種推薦的命名規則是:在定義數據庫、表、列的時候全部采用小寫字母加下劃線的方式,不使用任何大寫字母。

字段名和字段值:

字段名通常都是不區分大小寫的。

字段值的大小寫由mysql的校對規則來控制。提到校對規則,就不得不說字符集。字符集是一套符號和編碼,校對規則是在字符集內用于比較字符的一套規則,比如定義'A'<'B'這樣的關系的規則。不同的字符集有多種校對規則,一般而言,校對規則以其相關的字符集名開始,通常包括一個語言名,并且以ci(大小寫不敏感)、cs(大小寫敏感)或bin(二元)結束 。比如 utf8字符集,utf8generalci,表示不區分大小寫,這個是utf8字符集默認的校對規則;utf8generalcs表示區分大小寫,utf8bin表示二進制比較,同樣也區分大小寫。

校對規則通過關鍵字collate指定,比如創建數據庫test2,指定字符集為utf8,校對規則為utf8_bin

create database test2 default character set utf8 collate utf8_bin;

通過上述語句說明數據庫test2中的數據按utf8編碼,并且是對大小寫敏感的。

有時候我們建庫時,沒有指定校對規則校對時字符大小寫敏感,但是我們查詢時,又需要對字符比較大小寫敏感,就比如開篇中的例子,只想要jg開頭的字符串。沒關系,mysql提供了collate語法,通過指定utf8_bin校對規則即可。

還有另外一種方法,通過binary關鍵字,將串轉為二進制進行比較,由于大小寫字符的二進制肯定不同,因此可以認為是區分大小的一種方式。

校對規則與索引存儲的關系。因為校對規則會用于字符串之間比較,而索引是基于比較有序排列的,因此校對規則會影響記錄的索引順序。下面舉一個小例子說明:

建表: create table test3(name varchar(100), primary key(name)); create table test4(name varchar(100), primary key(name)) collate utf8_bin; 給表test3插入數據: insert into test3(name) values('abc'); insert into test3(name) values('ABD'); insert into test3(name) values('ZBC');給表test4插入數據: insert into test4(name) values('abc'); insert into test4(name) values('ABD'); insert into test4(name) values('ZBC');查表: select * from test3; select * from test4;

從結果可以看到test3和test4返回的結果集中,記錄的相對順序是不同的,因為是全表掃描,返回的記錄體現了主鍵順序。由于test3表校驗規則采用默認的utf8generalci,大小寫不敏感,因此abc

關于mysql相關海量教程可以關注文末公眾號回復【1】加助手微信索取。

本公眾號免費提供csdn下載服務,海量IT學習資源如果你準備入IT坑,勵志成為優秀的程序猿,那么這些資源很適合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大數據、面試資料、前端 等資源。同時我們組建了一個技術交流群,里面有很多大佬,會不定時分享技術文章,如果你想來一起學習提高,可以公眾號后臺回復【2】,免費邀請加技術交流群互相學習提高,會不定期分享編程IT相關資源。

掃碼關注,精彩內容第一時間推給你

總結

以上是生活随笔為你收集整理的numeric比较大小 数据库_mysql大小写敏感与校对规则的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。