sql 中包含特殊字符问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
GGGG430
V2EX    MySQL

sql 中包含特殊字符问题

  •  
  •   GGGG430 2023-01-11 20:16:25 +08:00 2957 次点击
    这是一个创建于 1062 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题, mysql5.7.40, 有一些特殊文本需要插入到 mysql 中,

    文本非常大上百兆, 其中包含很多 mysql 保留字或者其他特殊字符, 用 strings.Replace 之类很难逐一预测有哪些特殊字符可以替换,

    有什么办法可以把这些文本插入到 mysql 中的某个字段(text 类型)里面去呢?

    比如关闭 mysql 的一些保留字检查配置?

    15 条回复    2023-01-12 19:06:42 +08:00
    ming2050
        2
    ming2050  
       2023-01-11 20:23:16 +08:00 via iPhone
    如果不需要匹配检索,干脆 base64 存数据库好了
    n0099
        3
    n0099  
       2023-01-11 20:42:09 +08:00
    难道您还在手动拼接 raw sql ?要是这几百 m 的字符串里正好有个`; DROP DATABASE 您的库名;`呢?
    n0099
        4
    n0099  
       2023-01-11 20:45:29 +08:00
    另外如果您要导入的这个几百 m 的文件是合法的 csv (但您说`包含很多 mysql 保留字或者其他特殊字符,那大概率也有一大堆的,`),那您可以试试 LOAD DATA INFILE https://dev.mysql.com/doc/refman/8.0/en/load-data.html
    CEBBCAT
        5
    CEBBCAT  
       2023-01-11 20:54:27 +08:00
    看你提到了 strings.Replace ,是在用 Golang 对吗?最流行的驱动 github.com/go-sql-driver/mysql 支持占位符式语句呀,如果想用拼 SQL 的方式插入二进制数据,我只能评价为不可思议。

    https://gist.github.com/Zhang-Siyang/3f39f833f47b4abd854ca38ac147d32d
    kkhaike
        6
    kkhaike  
       2023-01-11 20:55:08 +08:00   1
    黑客就喜欢你这样的开发
    wengyanbin
        7
    wengyanbin  
       2023-01-11 22:28:14 +08:00 via Android
    文本上传服务器,数据库就保存 URL
    Shatyuka
        8
    Shatyuka  
       2023-01-11 23:17:45 +08:00 via iPhone
    占位符
    realpg
        9
    realpg  
    PRO
       2023-01-11 23:22:07 +08:00   1
    看了看万年历,确认不是 2003 年是 2023 年
    dayeye2006199
        10
    dayeye2006199  
       2023-01-12 01:55:19 +08:00
    如果对这个有疑问的话,还是上 ORM 把
    bjhc
        11
    bjhc  
       2023-01-12 10:12:50 +08:00
    文本插入数据库的目的是?
    如果仅仅是为了存储,还不如直接本地化存储文件,何必直接将大量文字存入数据库?
    sadfQED2
        12
    sadfQED2  
       2023-01-12 11:47:43 +08:00 via Android
    php 里面好像叫模板 SQL ,预编译 SQL

    Java 里面叫 SQL 占位符

    实在不行还有上古工具函数,比如 php 里面的 mysql_escape_string ,直接帮你把有问题的字符转义
    someonedeng
        13
    someonedeng  
       2023-01-12 15:23:22 +08:00
    上百兆非得塞 MySQL 里?
    n0099
        14
    n0099  
       2023-01-12 18:05:51 +08:00
    #11 @bjhc 回顾经典之把 UGC 图片的 blob 二进制全塞数据库里存然后每次获取图片都去查表

    #12 @sadfQED2 phppdo/jdbc/dbdriver 层提供的 prepated statment 不是银弹,无脑 escape 掉用户输入中的所有 sql 语法所使用的特殊字符也不是银弹: https://phpdelusions.net/pdo/sql_injection_example#escaping
    Daming
        15
    Daming  
       2023-01-12 19:06:42 +08:00
    参数化啊,orm 啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3473 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 04:21 PVG 12:21 LAX 20:21 JFK 23:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86