电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

記一次mysql字符串末尾空白丟失的排查

瀏覽:9日期:2023-08-14 20:18:43
目錄問題背景環境準備字符集與字符序  字符集  字符序  server的字符集與字符序  database的字符集與字符序  查看數據庫的字符集和字符序空白丟失總結參考問題背景

  一天,小伙伴找到我,他說他碰到一個很奇怪的問題

  他說:明明表名的入參是 test ,為什么展示到界面的記錄包括 test 這條記錄?

  他補充道:會不會是 MyBatis-Plus 做了什么騷操作,把 test 末尾的空格給拿掉了

  我:你直接把 SQL 語句到 MySQL 執行下試試

  結果如下:

  這看起來不夠直觀,我移動下光標

  然后我和小伙伴面面相覷

環境準備

   MySQL5 、 MySQL8 各準備一個

  我們來看下默認情況下,末尾空白的判斷情況

   MySQL 5.7.36 如下

  1 表示 TRUE ,也就是相等

   MySQL 8.0.27 如下

  0 表示 FALSE ,表示不相等

  這是什么原因,我們繼續往下看

字符集與字符序

  比較肯定就需要比較規則, SQL 的比較規則就離不開字符序,字符序又與字符集相關,所以我們一個一個來捋

  字符集

  關于字符集,不是只言片語可以說清楚的,但是大家也不用擔心,網上相關資料已經非常多,大家擦亮慧眼去查閱即可

  簡單點來說:字符集定義了字符和字符的編碼

  有人又問了:字符、字符的編碼又是什么?

  為了方便大家理解,舉個簡單栗子

    有四個字符:A、B、C、D,這四個字符的編碼分別是 A = 0, B = 1, C = 2, D = 3

    這里的字符(A、B、C、D) + 編碼(0、1、2、3)就構成了字符集(character set)

   MySQL 支持的字符集有很多,可以通過 SHOW CHARACTER SET; 查看

   Charset :字符集名

   Description :描述

   Default collation :默認字符序

   Maxlen :每個字符最多字節數

  字符序

  定義了字符的比較規則;字符間的比較按何種規則進行

  一個字符集對應多個字符序,通過 SHOW COLLATION; 可以查看全部的字符序;也可以帶條件查具體某個字符集的字符序

   Default 等于 Yes 表示是默認字符序

  每個字符集都有默認的字符序

  server的字符集與字符序

  當我們創建數據庫時,沒有指定字符集、字符序,那么server字符集、server字符序就會作為該數據庫的字符集、字符序

  database的字符集與字符序

  指定數據庫級別的字符集、字符序

  同一個MySQL服務下的數據庫,可以分別指定不同的字符集、字符序

  創建、修改數據庫的時候,可以通過 CHARACTER SET 、 COLLATE 指定數據庫的字符集、字符序

  可以通過

  查看數據庫的字符集和字符序

  table的字符集與字符序

  創建、修改表的時候,可以通過 CHARACTER SET 、 COLLATE 指定表的字符集、字符序

  可以通過

  查看表的字符序

  column的字符集與字符序

  類型為 CHAR 、 VARCHAR 、 TEXT 的列,可以指定字符集、字符序

  可以通過

  查看字段的字符集和字符序

  多個維度指定字符集、字符序的話,粒度越細的優先級越高( column > table > database > server )

  如果細粒度未指定字符集、字符序,那么會繼承上一級的字符集,字符序則是上一級字符集的默認字符序

  通常情況下我們一般不會指定 table 、 column 粒度的字符集、字符序

  也就是說,通常情況下 column 的字符集會與 database 的字符集一致,而 column 的字符序則是 database 字符集的默認字符序

空白丟失

  上面講了那么多,跟空白丟失有什么關系?

  大家先莫急,繼續往下看

   MySQL5.7 The CHAR and VARCHAR Types中有這么一段

  翻譯過來就是:

    1、類型是 CHAR 、 VARCHAR 、 TEXT 列的值,會根據列的字符序來比較和排序

    2、所有 MySQL 排序規則的類型都是 PAD SPACE 。這就意味著, CHAR 、 VARCHAR 、 TEXT 類型的值進行比較時,不用考慮任何末尾空格,LIKE 除外

    3、不受 SQL mode 影響,也就是說不管是嚴格模式,還是非嚴格模式,都不影響 2 所說的規則

  劃重點,記筆記:在 MySQL5.7 及以下( <=5.7 )版本中,排序規則都是 PAD SPACE ,末尾的空格會忽略不考慮

  那如何讓末尾空格參與比較了,有三種處理方式

  1、 BINARY ,類似 SELECT 'test' = BINARY 'test ';

  2、 LIKE ,類似 SELECT 'test' LIKE 'test ';

  3、 LENGTH 函數,類似

   MySQL8 做了調整,The CHAR and VARCHAR Types 有如下說明

  翻譯過來就是:

    1、類型是 CHAR 、 VARCHAR 、 TEXT 列的值,會根據列的字符序來比較和排序

    2、 MySQL 字符序的 pad 參數的可選值,除了 PAD SPACE ,還增加了 NO PAD

    3、對于非二進制字符串( CHAR 、 VARCHAR 、 TEXT ),字符序 pad 參數決定如何去處理字符串末尾的空格

       NO PAD 不會忽略末尾空格,會將其當做其他字符一樣對待

       PAD SPACE 會忽略末尾空格, LIKE 除外

       SQL mode 不參與字符串末尾空格的處理

   MySQL8 server 維度的字符集是 utf8mb4 ,對應的默認字符序是: utf8mb4_0900_ai_ci

   Pad_attribute 的值是 NO PAD ,也就是不會忽略字符串末尾的空格

  所以在 MySQL8 中, SELECT 'test' = 'test '; 默認情況下得到的結果是 0

總結

  1、非二進制字符串( CHAR 、 VARCHAR 、 TEXT )比較時,末尾空格的處理跟列的字符序有直接關系

  2、 MySQL5.7 及之前的版本,排序規則的類型都是 PAD SPACE ,會忽略字符串末尾的空格, LIKE 除外

  3、 MySQL8 開始,字符序增加了一個參數 Pad_attribute ,該參數的值不同,對字符串末尾空格的處理方式不同

     NO PAD :字符串末尾的空格會和其他字符一樣,不會被忽略

     PAD SPACE :字符串末尾的空格會被忽略, LIKE 除外

  4、如上針對的都是非二進制字符串的排序和比較,而不是儲存

參考

  The CHAR and VARCHAR Types

  The CHAR and VARCHAR Types

  再見亂碼:5分鐘讀懂MySQL字符集設置

到此這篇關于記一次mysql字符串末尾空白丟失的排查的文章就介紹到這了,更多相關mysql字符串末尾空白丟失的排查內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
主站蜘蛛池模板: 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 微型驱动系统解决方案-深圳市兆威机电股份有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家| 大白菜官网,大白菜winpe,大白菜U盘装系统, u盘启动盘制作工具 | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 青岛空压机,青岛空压机维修/保养,青岛空压机销售/出租公司,青岛空压机厂家电话 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 加盟店-品牌招商加盟-创业项目商机平台 | 影视模板素材_原创专业影视实拍视频素材-8k像素素材网 | 汕头市盛大文化传播有限公司,www.11400.cc | 喷播机厂家_二手喷播机租赁_水泥浆洒布机-河南青山绿水机电设备有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 成都热收缩包装机_袖口式膜包机_高速塑封机价格_全自动封切机器_大型套膜机厂家 | 好物生环保网、环保论坛 - 环保人的学习交流平台 |