sql 中包含特殊字符问题

2023-01-11 20:16:25 +08:00
 GGGG430

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

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

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

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

2459 次点击
所在节点    MySQL
15 条回复
dzdh
2023-01-11 20:19:37 +08:00
mringg
2023-01-11 20:23:16 +08:00
如果不需要匹配检索,干脆 base64 存数据库好了
h0099
2023-01-11 20:42:09 +08:00
难道您还在手动拼接 raw sql ?要是这几百 m 的字符串里正好有个`; DROP DATABASE 您的库名;`呢?
h0099
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
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
2023-01-11 20:55:08 +08:00
黑客就喜欢你这样的开发
wengyanbin
2023-01-11 22:28:14 +08:00
文本上传服务器,数据库就保存 URL
Shatyuka
2023-01-11 23:17:45 +08:00
占位符
realpg
2023-01-11 23:22:07 +08:00
看了看万年历,确认不是 2003 年是 2023 年
dayeye2006199
2023-01-12 01:55:19 +08:00
如果对这个有疑问的话,还是上 ORM 把
bjhc
2023-01-12 10:12:50 +08:00
文本插入数据库的目的是?
如果仅仅是为了存储,还不如直接本地化存储文件,何必直接将大量文字存入数据库?
sadfQED2
2023-01-12 11:47:43 +08:00
php 里面好像叫模板 SQL ,预编译 SQL

Java 里面叫 SQL 占位符

实在不行还有上古工具函数,比如 php 里面的 mysql_escape_string ,直接帮你把有问题的字符转义
someonedeng
2023-01-12 15:23:22 +08:00
上百兆非得塞 MySQL 里?
h0099
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
2023-01-12 19:06:42 +08:00
参数化啊,orm 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/908249

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX