【问题标题】:How to avoid special/escape characters in MySQL/BaSH如何避免 MySQL/BaSH 中的特殊/转义字符
【发布时间】:2014-05-11 20:41:24
【问题描述】:

我一直致力于将文本文件中的字符串插入 MySQL 数据库。然而,在这些字符串中可能有随机转义字符会影响 BaSH 或 MySQL。最初我试图将整个字符文本文件传递给 MySQL 并在那里处理它。但是现在我认为最好将数据切分并主要在 BaSH 中处理。

我从脚本文件中运行所有内容,但并不是最擅长使用 BaSH,我实际上主要使用 MySQL 或其他语言,如 C# 或 Java。

我知道您可以将其他语言嵌入到 BaSH 脚本中,但是最后我仍然需要将字符串传递给 MySQL 以进行插入,并且我需要保留文本文件的原始值。

那么,有没有一种方法可以将这些字符串传递给 MySQL,而语言只是忽略字符串中的字符,这样它就会保留它而不引起问题?

#!/bin/bash
cd /srv/mysql_PROJ/DB_scripts
echo ""
for dir in `cat ../pathlist.txt`; do
    for file in `/bin/ls -1 ${dir}/*.txt`; do
echo "Processing: dir(${dir}) / file(${file}); `cat ${file} | wc`"
    mysql -u rpm -p'password' --show-warnings --max_allowed_packet=16M call rpmdb.DataButcher( _utf8'`cat ${file}`');

    echo "Data inserted for:  `cat ${dir}`"
    echo ""
done
done
echo "Data parse and insert: Done."

这是我之前的代码,然后我有一个更复杂的 MySQL 程序来处理它。据我所知,它会命中一个字符并仅将部分文本传递给 MySQL,这会导致 MySQL 出现问题,并且文本文件中的以下行试图作为 BaSH 运行,显然它们不是 BaSH 命令。希望这会有所帮助,这是一个较旧的项目,我一直在回来,最后我看着它,我被搭上了。以崭新的头脑,我试图以不同的方式处理它。

注意:MySQL 中的过程称为“DataButcher”

【问题讨论】:

  • 只有文字?提供一些您拥有的代码,以便我们动手!
  • 不相关:BaSH 还是 BAsh?

标签: mysql sql linux bash


【解决方案1】:
  1. 最好不要使用 bash,而是使用命令行客户端 脚本语言,例如带有 mysql 库的 perl。在那里你可以使用 占位符?而不是字符串值并将其传递给参数 单独在 SQL 之外。

  2. 在紧要关头你可以使用 mysql UNHEX 函数

    插入 foo (bar) 值 (UNHEX("536166652066726f6d2053514c20696e6a656374696f6e2027"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2023-02-24
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多