MySQL儲存的欄位是不區分大小寫的,你知道嗎?
#00 簡單回顧
之前寫過一篇關於mysql 對錶大小寫敏感的問題,其實在mysql中字段存儲的內容是不區分大小寫的,本篇進行簡單的總結。
想回顧一下:
MySQL在Linux下資料庫名稱、表名、列名、別名大小寫規則是這樣的:
1、資料庫名稱與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
#3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、欄位內容預設是大小寫不敏感的。
01 一個範例
簡單範例:
CREATE TABLE `tb_user` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` VARCHAR (50) NOT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表'; INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('1', 'user'); INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('2', 'User'); INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('3', 'USER');
使用查詢語句查詢username 為全部小寫的user
的用戶,結果查詢出這個三筆記錄全部都查詢到了。
mysql> SELECT username from tb_user where username = 'user'; +----------+ | username | +----------+ | user | | User | | USER | +----------+ 3 rows in set
透過這個範例簡單說明,欄位內容預設是大小寫不敏感的。
02 解決方案
**因為預設欄位內容是不區分大小寫的,也即大小寫不敏感。 **所以解決方案就是要新增欄位內容的校驗規則。
使用mysql 的BINARY
關鍵字使搜尋區分大小寫。
在查詢的sql中加入BINARY
關鍵字
mysql> select * from tb_user where BINARY username ='user'; +----+----------+ | id | username | +----+----------+ | 1 | user | +----+----------+ 1 row in set
這種方式相對較簡單,不用改變表格結構,只要在需要區分查詢的欄位前方加上關鍵字。這種方式也是有缺點的,每次寫查詢的時候都要注意加關鍵字,並可能需要改動的程式碼較多。
在建立表格的時候進行限制
CREATE TABLE `tb_user1` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` VARCHAR (50) BINARY NOT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表'; mysql> show create table tb_user1; tb_user1 | CREATE TABLE `tb_user1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表' 1 row in set
或使用
CREATE TABLE `tb_user2` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` VARCHAR (50) NOT NULL COMMENT '用户名', `info` VARCHAR (100) NOT NULL COMMENT '详情描述', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE=utf8_bin COMMENT = '用户表'; mysql> show create table tb_user2; tb_user2 | CREATE TABLE `tb_user2` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '用户名', `info` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '详情描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'
使用NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
會將欄位中varchar類型的全部設定區分大小寫。這兩種查看表的詳情,本質上都是 在欄位上 加上了 COLLATE utf8_bin
。
03 總結
欄位值的大小寫由mysql的校對規則來控制。提到校對規則,就不得不說字符集。字元集是一套符號和編碼,校對規則是在字元集內用於比較字元的一套規則。一般而言,校對規則以其相關的字元集名開始,通常包括一個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束 。
例如 utf8字元集,,如下表:
1)utf8_bin:utf8_bin將字串中的每一個字元用二進位資料存儲,區分大小寫。
2)utf8_general_ci:utf8_genera_ci不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感。
3)utf8_general_cs:utf8_general_cs區分大小寫,cs為case sensitive的縮寫,即大小寫敏感。
附註:本機使用5.7 版本不支援 utf8_general_cs 字元集,建立報錯。
透過上一篇和這篇的內容,詳細大家對mysql對大小寫敏感的問題也有一定的認識了,在實際的開發中,庫和表名最好使用小寫字母,注意字段儲存內容的大寫問題。並且讓本機開發環境mysql的配置和伺服器上mysql的配置保持一致,這樣防止因為環境不一致而出現一些詭異問題。
你在開發中有沒有遇到一些詭異的問題呢?歡迎留言分享。
更多MySQL相關技術文章,請造訪MySQL教學##欄位學習!
以上是MySQL儲存的欄位是不區分大小寫的,你知道嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP設置環境變量主要有三種方式:1.通過php.ini全局配置;2.通過Web服務器(如Apache的SetEnv或Nginx的fastcgi_param)傳遞;3.在PHP腳本中使用putenv()函數。其中,php.ini適用於全局且不常變的配置,Web服務器配置適用於需要隔離的場景,putenv()適用於臨時性的變量。持久化策略包括配置文件(如php.ini或Web服務器配置)、.env文件配合dotenv庫加載、CI/CD流程中動態注入變量。安全管理敏感信息應避免硬編碼,推薦使用.en

要讓PHP容器支持自動構建,核心在於配置持續集成(CI)流程。 1.使用Dockerfile定義PHP環境,包括基礎鏡像、擴展安裝、依賴管理和權限設置;2.配置GitLabCI等CI/CD工具,通過.gitlab-ci.yml文件定義build、test和deploy階段,實現自動構建、測試和部署;3.集成PHPUnit等測試框架,確保代碼變更後自動運行測試;4.使用Kubernetes等自動化部署策略,通過deployment.yaml文件定義部署配置;5.優化Dockerfile,採用多階段構

搭建獨立PHP任務容器環境可通過Docker實現,具體步驟如下:1.安裝Docker與DockerCompose作為基礎;2.創建獨立目錄存放Dockerfile、crontab文件;3.編寫Dockerfile定義PHPCLI環境並安裝cron及必要擴展;4.編寫crontab文件定義定時任務;5.編寫docker-compose.yml掛載腳本目錄並配置環境變量;6.啟動容器並驗證日誌。相比Web容器內執行定時任務,獨立容器具備資源隔離、環境純粹、穩定性強、便於擴展等優勢。為確保日誌與錯誤捕

選擇日誌記錄方式:初期可用PHP內置error_log(),項目擴大後務必切換至Monolog等成熟庫,支持多handler和日誌級別,確保日誌含時間戳、級別、文件行號及錯誤詳情;2.設計存儲結構:小量日誌可文件存儲,大量或需分析則選數據庫,結構化數據用MySQL/PostgreSQL,半結構化/非結構化推薦Elasticsearch Kibana,同時制定備份與定期清理策略;3.開發分析界面:應具備搜索、過濾、聚合、可視化功能,可直接集成Kibana,或用PHP框架 圖表庫自研,注重界面簡潔易

本文旨在探討如何在Laravel框架中,利用EloquentORM對關聯數據進行高級條件查詢與過濾,解決在數據庫關係中實現“條件連接”的需求。文章將澄清MySQL中外鍵的實際作用,並詳細講解如何通過Eloquent的with方法結合閉包函數,對預加載的關聯模型應用特定的WHERE子句,從而靈活地篩選出符合條件的相關數據,提升數據檢索的精確性。

MySQL用於金融系統需優化四個關鍵點:1.金融數據必須使用DECIMAL類型確保精度,時間字段使用DATETIME避免時區問題;2.索引設計要合理,避免頻繁更新字段建索引,組合索引按查詢順序排列並定期清理無用索引;3.使用事務確保一致性,控制事務粒度,避免長事務和非核心操作嵌入其中,並根據業務選擇合適隔離級別;4.對歷史數據按時間分區、歸檔冷數據並使用壓縮表,提升查詢效率並優化存儲。

是否值得將MySQL遷到雲上取決於具體使用場景。如果你的業務需要快速上線、彈性擴展和簡化運維,且能接受按需付費模式,那麼遷雲是值得的;但若你的數據庫長期穩定、對延遲敏感或受合規限制,則可能不划算。控製成本的關鍵包括選擇合適廠商與套餐、合理配置資源、利用預留實例、管理備份日誌及優化查詢性能。

TooptimizeMySQLforreal-timedatafeeds,firstchoosetheInnoDBstorageenginefortransactionsandrow-levellocking,useMEMORYorROCKSDBfortemporarydata,andpartitiontime-seriesdatabytime.Second,indexstrategicallybyonlyapplyingindexestoWHERE,JOIN,orORDERBYcolumns,
