欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 獲取字符串長(zhǎng)度及注意事項(xiàng)

 更新時(shí)間:2025年06月24日 11:25:04   作者:步行cgn  
本文通過(guò)實(shí)例代碼給大家介紹MySQL 獲取字符串長(zhǎng)度及注意事項(xiàng),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

MySQL 獲取字符串長(zhǎng)度詳解

?? 核心長(zhǎng)度函數(shù)對(duì)比

函數(shù)作用示例返回值
LENGTH()字節(jié)數(shù)LENGTH('中國(guó)')6 (UTF8)
CHAR_LENGTH()字符數(shù)CHAR_LENGTH('中國(guó)')2
BIT_LENGTH()比特?cái)?shù)BIT_LENGTH('A')8
OCTET_LENGTH()LENGTH()別名OCTET_LENGTH('中國(guó)')6

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

1. 字符編碼決定字節(jié)長(zhǎng)度

-- 查看數(shù)據(jù)庫(kù)編碼
SHOW VARIABLES LIKE 'character_set%';
-- 不同編碼下的長(zhǎng)度差異
SET @str = '中國(guó)';
SELECT 
  LENGTH(@str),                     -- 6 (UTF8)
  LENGTH(CONVERT(@str USING latin1)); -- 2 (latin1)

2. NULL 值的特殊處理

SELECT 
  LENGTH(NULL),      -- NULL
  CHAR_LENGTH(NULL); -- NULL

3. 多字節(jié)字符陷阱

-- 中文字符(UTF8)
SELECT 
  LENGTH('數(shù)據(jù)庫(kù)'),    -- 9 (3字×3字節(jié))
  CHAR_LENGTH('數(shù)據(jù)庫(kù)'); -- 3
-- Emoji字符(UTF8MB4)
SELECT 
  LENGTH('??'),       -- 4 (UTF8MB4)
  CHAR_LENGTH('??');  -- 1

4. 空格和特殊字符

SELECT 
  LENGTH('  '),        -- 2 (空格)
  LENGTH('\t'),        -- 1 (制表符)
  CHAR_LENGTH(' ');    -- 1

5. 數(shù)值類(lèi)型的隱式轉(zhuǎn)換

SELECT 
  LENGTH(12345),      -- 5 (轉(zhuǎn)為字符串'12345')
  CHAR_LENGTH(100.00);-- 6 (轉(zhuǎn)為'100.00')

6. 二進(jìn)制數(shù)據(jù)長(zhǎng)度

SELECT 
  LENGTH(BINARY 'abc'), -- 3
  LENGTH(X'41');        -- 1 (十六進(jìn)制'A')

?? 高級(jí)應(yīng)用場(chǎng)景

1. 驗(yàn)證輸入長(zhǎng)度限制

-- 用戶名長(zhǎng)度驗(yàn)證(6-20字符)
SELECT *
FROM users
WHERE CHAR_LENGTH(username) BETWEEN 6 AND 20;

2. 檢測(cè)多字節(jié)字符存在

-- 查找包含中文的記錄
SELECT *
FROM products
WHERE LENGTH(product_name) != CHAR_LENGTH(product_name);

3. 優(yōu)化存儲(chǔ)空間

-- 計(jì)算平均名稱(chēng)長(zhǎng)度(按字節(jié))
SELECT AVG(LENGTH(name)) AS avg_byte_length
FROM customers;
-- 按字符長(zhǎng)度分組統(tǒng)計(jì)
SELECT 
  CHAR_LENGTH(title) AS title_length,
  COUNT(*) AS count
FROM articles
GROUP BY title_length;

4. 截?cái)喑L(zhǎng)字符串

SET @long_text = 'This is a very long text...';
-- 安全截取前100字符
SELECT 
  IF(CHAR_LENGTH(@long_text) > 100, 
    CONCAT(SUBSTRING(@long_text, 1, 97), '...'),
    @long_text) AS truncated_text;

?? 性能優(yōu)化指南

1. 索引使用原則

-- 前綴索引創(chuàng)建(按字節(jié))
ALTER TABLE products ADD INDEX idx_name (name(20));
-- 按字符長(zhǎng)度過(guò)濾優(yōu)化
SELECT * FROM products 
WHERE CHAR_LENGTH(name) > 10; -- 全表掃描
-- 優(yōu)化方案:添加虛擬列
ALTER TABLE products
ADD COLUMN name_char_len TINYINT 
  AS (CHAR_LENGTH(name)) VIRTUAL,
ADD INDEX idx_name_len (name_char_len);

2. 避免全表掃描

-- 低效查詢(無(wú)法使用索引)
SELECT * FROM logs 
WHERE LENGTH(message) > 1000;
-- 優(yōu)化方案:存儲(chǔ)計(jì)算值
ALTER TABLE logs
ADD COLUMN msg_length SMALLINT 
  AS (LENGTH(message)) STORED,
ADD INDEX idx_msg_len (msg_length);

3. 內(nèi)存配置優(yōu)化

-- 增大排序緩沖區(qū)
SET sort_buffer_size = 8*1024*1024; 
-- 查看當(dāng)前配置
SHOW VARIABLES LIKE 'sort_buffer_size';

?? 函數(shù)行為對(duì)比表

輸入值LENGTH()CHAR_LENGTH()說(shuō)明
'abc'33英文相同
'中國(guó)'62中文差異
'??'41Emoji差異
NULLNULLNULL空值
12333數(shù)字轉(zhuǎn)換
''00空字符串
' '11空格

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

  1. 字符數(shù) vs 字節(jié)數(shù)

    • 顯示用途 → CHAR_LENGTH()
    • 存儲(chǔ)優(yōu)化 → LENGTH()

多語(yǔ)言系統(tǒng)

-- 始終指定字符集
SELECT CHAR_LENGTH(_utf8mb4 '???????????'); -- 1 (家庭emoji)

列設(shè)計(jì)建議

CREATE TABLE users (
  id INT PRIMARY KEY,
  username VARCHAR(20) CHARACTER SET utf8mb4, -- 按字符限制
  bio TEXT
);

安全截?cái)?/strong>:

-- 確保不超過(guò)字段限制
INSERT INTO users (username)
VALUES (SUBSTRING(input_name, 1, 20));
  1. 性能關(guān)鍵點(diǎn)

    • 避免在 WHERE 子句中直接使用長(zhǎng)度函數(shù)
    • 對(duì)頻繁查詢的長(zhǎng)度值使用物化列
    • 為長(zhǎng)文本字段添加前綴索引

到此這篇關(guān)于MySQL 獲取字符串長(zhǎng)度詳解的文章就介紹到這了,更多相關(guān)mysql字符串長(zhǎng)度內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL8.0如何配置Path環(huán)境變量

    MySQL8.0如何配置Path環(huán)境變量

    將MySQL的bin目錄添加到系統(tǒng)的環(huán)境變量中,可以避免每次登錄MySQL時(shí)都需要輸入cd命令,具體步驟如下:首先,右鍵桌面上的“此電腦”選擇“屬性”,點(diǎn)擊左側(cè)的“高級(jí)系統(tǒng)設(shè)置”,在“系統(tǒng)屬性”對(duì)話框中選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量”
    2024-11-11
  • MySQL修改表結(jié)構(gòu)操作命令總結(jié)

    MySQL修改表結(jié)構(gòu)操作命令總結(jié)

    這篇文章主要介紹了MySQL修改表結(jié)構(gòu)操作命令總結(jié),包含如刪除列、添加列、修改列、添加主鍵、刪除主鍵、添加唯一索引、添加普通索引等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • MySQL每日練習(xí)之單表查詢

    MySQL每日練習(xí)之單表查詢

    這篇文章主要給大家介紹了關(guān)于MySQL每日練習(xí)之單表查詢的相關(guān)資料,數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)最重要的功能就是數(shù)據(jù)查詢,數(shù)據(jù)查詢不應(yīng)只是簡(jiǎn)單查詢數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù),還應(yīng)該根據(jù)需要對(duì)數(shù)據(jù)進(jìn)行篩選,需要的朋友可以參考下
    2023-07-07
  • MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式

    MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式

    這篇文章主要介紹了MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQLMerge存儲(chǔ)引擎

    MySQLMerge存儲(chǔ)引擎

    MERGE存儲(chǔ)引擎把一組MyISAM數(shù)據(jù)表當(dāng)做一個(gè)邏輯單元來(lái)對(duì)待,讓我們可以同時(shí)對(duì)他們進(jìn)行查詢。本文給大家介紹MySQLMerge存儲(chǔ)引擎,需要的朋友參考下吧
    2016-03-03
  • MySQL筆記之觸發(fā)器的應(yīng)用

    MySQL筆記之觸發(fā)器的應(yīng)用

    觸發(fā)器是由事件來(lái)觸發(fā)某個(gè)操作,這些事件包括INSERT語(yǔ)句,UPDATE語(yǔ)句和DELETE語(yǔ)句
    2013-05-05
  • MySql中把一個(gè)表的數(shù)據(jù)插入到另一個(gè)表中的實(shí)現(xiàn)代碼

    MySql中把一個(gè)表的數(shù)據(jù)插入到另一個(gè)表中的實(shí)現(xiàn)代碼

    本篇文章是對(duì)MySql中把一個(gè)表的數(shù)據(jù)插入到另一個(gè)表中的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • MySQL筑基篇之增刪改查操作詳解

    MySQL筑基篇之增刪改查操作詳解

    這篇文章主要和大家講解一下MySQL數(shù)據(jù)庫(kù)的增刪改查操作,這里的查詢確切的說(shuō)應(yīng)該是初級(jí)的查詢,不涉及函數(shù)、分組等模塊,需要的可以參考一下
    2022-07-07
  • MySQL之存儲(chǔ)函數(shù)詳細(xì)介紹

    MySQL之存儲(chǔ)函數(shù)詳細(xì)介紹

    大家好,本篇文章主要講的是MySQL之存儲(chǔ)函數(shù)詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • mysql 8.0.25 解壓版安裝配置方法圖文教程

    mysql 8.0.25 解壓版安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.25 解壓版安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評(píng)論