MySQL检查和清理不可见字符(BOM头)

18 阅读1分钟

故事背景

今天四大运营商其中一个交给我们一个 Excel 表格,我们没有做任何数据清理就导入 MySQL 了,导致 a 字段出现了大量不可见字符。

检查

检查时,我们要知道不可见字符都有哪些。通常是空格、制表符、换行符、BOM头。这里我们主要清理BOM头,也就是 UTF-8 BOM 头:

SELECT 
  a AS 原始数据,
  -- 核心处理逻辑:先删BOM头→清空白
  TRIM(REPLACE(a, CHAR(0xEF, 0xBB, 0xBF), '')) AS 清理后,
  LENGTH(a) AS 原始字节长度,
  CHAR_LENGTH(a) AS 原始字符长度,
  -- 验证清理后的长度
  LENGTH(TRIM(REPLACE(a, CHAR(0xEF, 0xBB, 0xBF), ''))) AS 清理后字节长度,
  CHAR_LENGTH(TRIM(REPLACE(a, CHAR(0xEF, 0xBB, 0xBF), ''))) AS 清理后字符长度
FROM yys_data
WHERE LENGTH(a) != CHAR_LENGTH(a);

清理

所以,对应清理时,也就非常简单:

UPDATE
yys_data
SET
a = TRIM(REPLACE(a, CHAR(0xEF, 0xBB, 0xBF), ''))
WHERE
LENGTH(a) != CHAR_LENGTH(a);