最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL字符串截取的核心要點(diǎn)和注意事項(xiàng)

 更新時(shí)間:2025年08月19日 09:24:30   作者:步行cgn  
這篇文章主要介紹了MySQL字符串截取的核心要點(diǎn)和注意事項(xiàng),substr函數(shù)在數(shù)據(jù)處理中有著廣泛的應(yīng)用,從日志分析、數(shù)據(jù)報(bào)告生成到復(fù)雜的數(shù)據(jù)清洗和處理流程中,substr都能大顯身手,需要的朋友可以參考下

我將全面講解 MySQL 中字符串截取的核心要點(diǎn)和注意事項(xiàng):

核心截取函數(shù)

1.SUBSTRING()/SUBSTR()

-- 基本語(yǔ)法
SELECT SUBSTRING('MySQL Tutorial', 7, 5); -- 'Tutor'

-- 負(fù)起始位置(從右向左)
SELECT SUBSTRING('Database', -4, 4); -- 'base'

2.LEFT()&RIGHT()

SELECT LEFT('Hello World', 5); -- 'Hello'
SELECT RIGHT('Hello World', 5); -- 'World'

3.SUBSTRING_INDEX()

-- 按分隔符截取
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -- 'www.mysql'

八大關(guān)鍵注意事項(xiàng)

1.索引從1開(kāi)始(不是0)

SELECT SUBSTRING('ABCDE', 1, 1); -- 'A' ?
SELECT SUBSTRING('ABCDE', 0, 1); -- '' ?

2.多字節(jié)字符問(wèn)題(中文/emoji)

-- UTF8中文字符(每個(gè)占3字節(jié))
SELECT SUBSTRING('中國(guó)', 2, 1); -- 亂碼('?')

-- 解決方案:按字符截取
SELECT SUBSTRING('中國(guó)' FROM 2 FOR 1); -- '國(guó)' ?

3.長(zhǎng)度超限自動(dòng)修正

-- 實(shí)際截取長(zhǎng)度 = min(指定長(zhǎng)度, 剩余長(zhǎng)度)
SELECT SUBSTRING('Short', 2, 10); -- 'hort'

4.NULL處理規(guī)則

SELECT SUBSTRING(NULL, 1, 3); -- NULL
SELECT SUBSTRING('Text', NULL, 3); -- NULL

5.負(fù)起始位置計(jì)算

-- 公式:實(shí)際位置 = 字符串長(zhǎng)度 + 負(fù)起始值 + 1
SELECT SUBSTRING('Database', -3, 3); -- 'ase'(位置6開(kāi)始)

6.性能陷阱(大數(shù)據(jù)量)

-- 避免在WHERE中直接截取(無(wú)法使用索引)
SELECT * FROM users WHERE SUBSTRING(email, 5, 10) = 'example';

-- 優(yōu)化方案:使用前綴索引
ALTER TABLE users ADD INDEX idx_email_prefix (email(15));
SELECT * FROM users WHERE email LIKE 'exam%';

7.與CHAR_LENGTH的區(qū)別

SELECT 
  LENGTH('中國(guó)'), -- 6字節(jié)(UTF8)
  CHAR_LENGTH('中國(guó)'), -- 2字符
  SUBSTRING('中國(guó)', 2, 1); -- 截取第2字節(jié)(亂碼)

8.日期/數(shù)字轉(zhuǎn)換問(wèn)題

-- 數(shù)字需先轉(zhuǎn)為字符串
SELECT SUBSTRING(20230815, 5, 2); -- 錯(cuò)誤(數(shù)字截?。?
SELECT SUBSTRING(CAST(20230815 AS CHAR), 5, 2); -- '08' ?

實(shí)用截取技巧

1. 提取文件名

SELECT 
  SUBSTRING_INDEX('/path/to/file.txt', '/', -1); -- 'file.txt'

2. 郵箱域名提取

SELECT 
  SUBSTRING_INDEX('user@example.com', '@', -1); -- 'example.com'

3. 安全截取URL參數(shù)

SET @url = 'https://example.com/page?param=value#section';
SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(@url, '?', -1), '#', 1); -- 'param=value'

4. 中文字符安全截取

-- 創(chuàng)建多字節(jié)安全函數(shù)
DELIMITER $$
CREATE FUNCTION mb_substr(str VARCHAR(255), start INT, len INT)
RETURNS VARCHAR(255) DETERMINISTIC
BEGIN
  RETURN CONVERT(SUBSTRING(str FROM start FOR len) USING utf8mb4);
END$$
DELIMITER ;

SELECT mb_substr('中國(guó)加油', 3, 2); -- '加油' ?

性能優(yōu)化方案

1.索引使用原則

-- 前綴索引創(chuàng)建
ALTER TABLE products ADD INDEX idx_name_prefix (product_name(10));

-- 有效查詢
SELECT * FROM products WHERE product_name LIKE 'Apple%';

-- 無(wú)效查詢(索引失效)
SELECT * FROM products WHERE SUBSTRING(product_name, 1, 5) = 'Apple';

2.避免全表掃描

-- 優(yōu)化前(全表掃描)
SELECT * FROM logs WHERE SUBSTRING(message, 10, 5) = 'ERROR';

-- 優(yōu)化后(使用虛擬列+索引)
ALTER TABLE logs ADD COLUMN error_code VARCHAR(5) 
  AS (SUBSTRING(message, 10, 5)) VIRTUAL;
ALTER TABLE logs ADD INDEX idx_error_code (error_code);

3.內(nèi)存使用監(jiān)控

-- 監(jiān)控臨時(shí)表大小
SHOW VARIABLES LIKE 'tmp_table_size'; -- 默認(rèn)16MB
SET tmp_table_size = 64*1024*1024; -- 增大臨時(shí)表內(nèi)存

函數(shù)對(duì)比表

函數(shù)特點(diǎn)適用場(chǎng)景
SUBSTRING()靈活定位任意位置截取
LEFT()/RIGHT()高效簡(jiǎn)單首尾固定長(zhǎng)度截取
SUBSTRING_INDEX()分隔符處理路徑/域名解析
MID()SUBSTRING別名兼容舊代碼

最佳實(shí)踐總結(jié)

  1. 始終驗(yàn)證字符編碼:處理多語(yǔ)言數(shù)據(jù)前執(zhí)行 SHOW VARIABLES LIKE 'character_set%'
  2. 避免負(fù)位置與超長(zhǎng)參數(shù):明確業(yè)務(wù)需求邊界
  3. 大文本處理優(yōu)先考慮應(yīng)用層:減少數(shù)據(jù)庫(kù)壓力
  4. 創(chuàng)建計(jì)算列+索引:對(duì)頻繁截取字段優(yōu)化
  5. 重要數(shù)據(jù)先備份:執(zhí)行UPDATE前備份原字段
-- 安全更新示例
CREATE TABLE users_backup AS SELECT * FROM users;
UPDATE users 
SET phone_area = SUBSTRING(phone, 1, 3);

總結(jié) 

到此這篇關(guān)于MySQL字符串截取的核心要點(diǎn)和注意事項(xiàng)的文章就介紹到這了,更多相關(guān)MySQL字符串截取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL中禁止修改數(shù)據(jù)庫(kù)表特定列的實(shí)現(xiàn)

    MySQL中禁止修改數(shù)據(jù)庫(kù)表特定列的實(shí)現(xiàn)

    本文主要介紹了MySQL數(shù)據(jù)庫(kù)中使用觸發(fā)器禁止修改特定列,以保護(hù)數(shù)據(jù)的一致性和完整性,下面就來(lái)介紹一下,感興趣的可以了解一下
    2024-12-12
  • MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享

    MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享

    這篇文章主要介紹了MySQL中導(dǎo)出用戶權(quán)限設(shè)置的腳本分享,本文通過(guò)導(dǎo)出mysql.user表中數(shù)據(jù)實(shí)現(xiàn)導(dǎo)出權(quán)限設(shè)置,需要的朋友可以參考下
    2014-10-10
  • MYSQL的日志文件詳解

    MYSQL的日志文件詳解

    MySQL的日志系統(tǒng)包括錯(cuò)誤日志、二進(jìn)制日志、慢查詢?nèi)罩?、通用查詢?nèi)罩?、重做日志和回滾日志,它們各自有不同的作用和性能影響,本文給大家介紹MYSQL的日志文件知識(shí),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • mysql中復(fù)制表結(jié)構(gòu)的方法小結(jié)

    mysql中復(fù)制表結(jié)構(gòu)的方法小結(jié)

    這篇文章主要介紹了mysql中復(fù)制表結(jié)構(gòu)的方法,需要的朋友可以參考下
    2014-07-07
  • mysql壓縮包版zip安裝配置方法

    mysql壓縮包版zip安裝配置方法

    這篇文章主要為大家詳細(xì)介紹了mysql壓縮包版zip安裝配置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • MySQL高可用解決方案MMM(mysql多主復(fù)制管理器)

    MySQL高可用解決方案MMM(mysql多主復(fù)制管理器)

    MySQL本身沒(méi)有提供replication failover的解決方案,通過(guò)MMM方案能實(shí)現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實(shí)現(xiàn)mysql的高可用。MMM不僅能提供浮動(dòng)IP的功能,如果當(dāng)前的主服務(wù)器掛掉后,會(huì)將你后端的從服務(wù)器自動(dòng)轉(zhuǎn)向新的主服務(wù)器進(jìn)行同步復(fù)制,不用手工更改同步配置
    2017-09-09
  • 關(guān)于Mysql中文亂碼問(wèn)題該如何解決(亂碼問(wèn)題完美解決方案)

    關(guān)于Mysql中文亂碼問(wèn)題該如何解決(亂碼問(wèn)題完美解決方案)

    這篇文章給大家介紹關(guān)于Mysql中文亂碼問(wèn)題該如何解決(亂碼問(wèn)題完美解決方案)的相關(guān)資料,還給大家收集些關(guān)于MySQL會(huì)出現(xiàn)中文亂碼原因常見(jiàn)的幾點(diǎn),小伙伴快來(lái)看看吧
    2015-11-11
  • MySQL查詢優(yōu)化的三種處理階段(Index Key、Index Filter和Table Filter)詳解

    MySQL查詢優(yōu)化的三種處理階段(Index Key、Index Filter和Table 

    在 MySQL 中,索引主要用于優(yōu)化查詢,在 MySQL 查詢優(yōu)化中涉及到三種處理階段,Index Key、Index Filter 和 Table Filter,下面小編就為大家詳細(xì)介紹一下這三個(gè)階段吧
    2025-09-09
  • 基于mysql 默認(rèn)排序規(guī)則的坑

    基于mysql 默認(rèn)排序規(guī)則的坑

    這篇文章主要介紹了解決mysql 默認(rèn)排序規(guī)則的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看不看
    2021-02-02
  • MySQL如何選擇合適的索引

    MySQL如何選擇合適的索引

    這篇文章主要介紹了MySQL如何選擇合適的索引,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

赣榆县| 双峰县| 太保市| 从化市| 呼伦贝尔市| 漳浦县| 五台县| 连州市| 泾阳县| 买车| 晋江市| 博湖县| 屯门区| 贵定县| 平江县| 浦北县| 山阴县| 高密市| 镇平县| 大埔县| 泗阳县| 视频| 和平区| 万宁市| 涟源市| 武山县| 大连市| 兴城市| 罗定市| 六盘水市| 林芝县| 西昌市| 高阳县| 博兴县| 二手房| 商城县| 颍上县| 阳朔县| 武威市| 图木舒克市| 平谷区|