簡體   English   中英

如何避免MySQL / BaSH中的特殊/轉義字符

[英]How to avoid special/escape characters in MySQL/BaSH

我一直在努力將文本文件中的字符串插入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”

  1. 最好不要使用bash,而命令行客戶端應該使用像perl這樣的腳本語言和mysql庫。 在那里可以使用占位符? 而不是字符串值,並將其參數分別傳遞到SQL之外。

  2. 您可以在緊急情況下使用mysql UNHEX函數

    插入foo(bar)值(UNHEX(“ 536166652066726f6d2053514c20696e6a656374696f6e2027”));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM