如何避免MySQL / BaSH中的特殊/转义字符

时间:2014-05-11 20:41:25

标签: mysql sql linux bash

我一直在努力将文本文件中的字符串插入到MySQL数据库中。但是在这些字符串中可能存在随机转义字符,这些字符会影响BaSH或MySQL。最初我试图将整个文本文件传递给MySQL并在那里处理它。但是现在我觉得削减数据并在BaSH中处理它可能会更好。

我正在运行脚本文件中的所有内容,而且不是最好的BaSH,我实际上主要使用MySQL或其他语言,如C#或Java。

我知道你可以将其他语言嵌入到BaSH脚本中,但最后我还是需要将字符串传递给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"

1 个答案:

答案 0 :(得分:1)

  1. 最好不要使用bash而命令行客户端改为使用a 脚本语言,如perl和mysql库。在那里你可以使用 占位符?而不是字符串值并传递它们的参数 单独在SQL之外。

  2. 您可以使用mysql UNHEX函数

    INSERT INTO foo(bar)VALUES(UNHEX(" 536166652066726f6d2053514c20696e6a656374696f6e2027"));