› 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 · Jan 11, 2023 · 3635 views
    This topic created in 1358 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    Java 里面叫 SQL 占位符

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

    #12 @sadfQED2 phppdo/jdbc/dbdriver 层提供的 prepated statment 不是银弹,无脑 escape 掉用户输入中的所有 sql 语法所使用的特殊字符也不是银弹: https://phpdelusions.net/pdo/sql_injection_example#escaping
    Daming
        15
    Daming  
       Jan 12, 2023
    参数化啊,orm 啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   876 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 19:31 · PVG 03:31 · LAX 12:31 · JFK 15:31
    ♥ Do have faith in what you're doing.