Check Special Letter
为数据表自动生成特殊字符探查 SQL,帮助用户发现字段值中肉眼难辨的脏字符 (双引号、TAB、回车、换行、反斜杠),这些字符常导致导出/传 API 时解析异常。
覆盖的特殊字符
| 标签 | 字符 | 说明 |
|------|------|------|
| BACKSLASH | \ | 反斜杠,需 ESCAPE '\\' 匹配 |
| QUOTE | " | 双引号 |
| CR | \r | 回车 |
| LF | \n | 换行 |
| TAB | \t | 制表符 |
输入方式(任一种)
- 直接发 SELECT 语句(聊天粘贴或 .sql 文件)
SELECT `ID`, `NAME`, `SPECIFICATION_MODEL` FROM ODS_SMOM_ITEM; - 直接发 DDL(CREATE TABLE,脚本自动识别文本类字段)
CREATE TABLE ODS_SMOM_ITEM ( `ID` decimalv3(20,4), `NAME` varchar(200), `SPECIFICATION_MODEL` varchar(4000) ); - 多表:一次可含多段 SELECT(分号分隔)或多个 CREATE TABLE,脚本逐表生成。
使用方式
调用核心脚本(实际功能独立在此脚本中):
# 方式A:SELECT 直接传参
python3 scripts/gen_check.py --select "SELECT \`NAME\`,\`SPECIFICATION_MODEL\` FROM ODS_SMOM_ITEM" --out check.sql
# 方式B:SELECT 从文件读
python3 scripts/gen_check.py --select-file my_select.sql --out check.sql
# 方式C:DDL 文件
python3 scripts/gen_check.py --ddl-file my_ddl.sql --out check.sql
# 不指定 --out 则打印到 stdout
输出说明
- 每张表一段,字段级
UNION ALL。 - 返回三列:
col(字段名)、hit(命中的字符类型,如QUOTE,TAB,)、sample(命中行的原始值,便于核对)。 - 只返回有命中的字段行,干净字段不出现,一眼看出哪些字段需加转义。
- 字符串/文本类字段才纳入扫描(varchar/char/text/string 等);数值、日期、布尔、枚举类默认跳过。
与转义 SQL 的配合
探查发现某字段含上述字符后,按用户既有转义规范处理(以 SPECIFICATION_MODEL 为例):
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(`SPECIFICATION_MODEL`, '\\', '\\\\'), '"', '\\"'), '\t', ' '), '\r', ' '), '\n', ' ') AS `SPECIFICATION_MODEL`
注意:反斜杠加倍、双引号前加 \ 是"保留并转义"语义(传 API 场景);
若需"清洗删除"而非转义,把对应 REPLACE 的目标值改为 '' 即可。
约束
- 不擅自修改用户原始 SELECT/DDL 的字段语义。
- 生成脚本只做"探查",不改写数据。
- 超 30 行产物以 .sql 文件交付。
微信扫一扫