【问题标题】:Retreive data from MySQL TEXT type in the same format从 MySQL TEXT 类型中检索相同格式的数据
【发布时间】:2019-01-25 08:56:04
【问题描述】:

我有一个将文本文件保存到 MySQL 的脚本。这是表的结构:

create table save( 
    id INT(10) NOT NULL AUTO_INCREMENT,
    client_name VARCHAR(255) NOT NULL,
    file_txt TEXT NOT NULL,
    primary key (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

感谢这个脚本,我可以在下面的脚本中向表格中添加数据:

#!/bin/bash
DB_USER="root"
DB_PASSWD=""
DB_NAME="test_save"
TABLE="save"

if [ $# -eq 1 ]; then
    client="$1"
    file=`cat /path/to/the/file`
    mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME << EOF
        INSERT INTO $TABLE (client_name, file_txt) VALUES ("$client", "$file");
EOF
else
    echo "Missing client name"
fi

这是file的原始内容(它是一个openVPN文件):

client
proto udp
remote IPADRESS PORT
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server_3sO2TzCVUQf73j0R name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
setenv opt block-outside-dns
verb 0
<ca>
-----BEGIN CERTIFICATE-----
SOME KEY
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
SOME KEY
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
SOME KEY
-----END PRIVATE KEY-----
</key>
key-direction 1
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
SOME KEY
-----END OpenVPN Static key V1-----
</tls-auth>

所以我通过脚本成功地将文件的内容添加到了数据库中。


当我尝试使用另一个脚本检索数据时:

#!/bin/bash
DB_USER="root"
DB_PASSWD=""
DB_NAME="test_save"
TABLE="save"

if [ $# -eq 1 ]; then
    client="$1"
    content_file=$(echo "SELECT file_txt FROM $TABLE WHERE client_name='$client'" | mysql $DB_NAME -u $DB_USER -p$DB_PASSWD)
    echo "$content_file" >> new_file

else
    echo "Missing client name"
fi

但是当我打开new_file 时,我得到以下信息:

ovpn
client\nproto udp\nremote IPADRESS PORT\ndev tun\nresolv-retry infinite\nnobind\npersist-key\npersist-tun\nremote-cert-tls server\nverify-x509-name server_3sO2TzCVUQf73j0R name\nauth SHA256\nauth-nocache\ncipher AES-128-GCM\ntls-client\ntls-version-min 1.2\ntls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256\nsetenv opt block-outside-dns \nverb 0\n<ca>\n-----BEGIN CERTIFICATE-----\nSOME KEY\n-----END CERTIFICATE-----\n</ca>\n<cert>\n-----BEGIN CERTIFICATE-----\nSOME KEY\n-----END CERTIFICATE-----\n</cert>\n<key>\n-----BEGIN PRIVATE KEY-----\nSOME KEY\n-----END PRIVATE KEY-----\n</key>\nkey-direction 1\n<tls-auth>\n#\n# 2048 bit OpenVPN static key\n#\n-----BEGIN OpenVPN Static key V1-----\nSOME KEY\n-----END OpenVPN Static key V1-----\n</tls-auth>

所以我不知道如何以相同的格式检索它。或者我应该将文件存储在 BLOB 类型中吗?

【问题讨论】:

    标签: mysql sql bash openvpn


    【解决方案1】:

    “相同格式”是指您不希望它显示在 1 行吗? 如果是这样,您可以尝试替换:

    echo "$content_file" >> new_file
    

    与:

    echo -e "$content_file" >> new_file
    

    -e 选项应该正确地将 '\n' 转换为新行

    【讨论】:

    • 你能在你的回答中添加一个解释吗?这将有助于了解差异
    • 我认为这很清楚。如果他不希望所有内容都显示在 1 行上,我建议 OP 使用 echo 的 -e 选项
    • 我看到您在通话中添加了一个选项。但是 SO 答案应该始终包含对此类添加的解释,这样人们不仅可以阅读答案并知道有一些选项-e 可以神奇地解决这个问题,而且可以知道什么此选项确实如此,为什么在这种情况下很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2018-08-30
    • 2023-03-16
    相关资源
    最近更新 更多