Mysql

使用反斜杠進行轉儲和導入

  • February 25, 2022

背景

我有一個 MySQL 數據庫,我從中執行mysqldump備份。

在這個數據庫中,我有一些欄位將包含一些反斜杠,當轉儲它時,它將包含類似

INSERT INTO table1 (col1, col2) VALUES (1, '\frac{1}{2}');

(作為參考,這是TeX,在這種情況下用於排版數學。)

問題

現在,當我用

mysql -u username -p database_name < file.sql

值中的反斜杠col2消失。很可能,它不是插入它,而是用於轉義以下字元。

有沒有辦法在保持反斜杠的同時插入它?

到目前為止,我的想法是製作一個腳本來遍歷文件並替換每次出現的\with \\。這可靠嗎?

我會假設有人已經想到了這個問題,並且可能創造了一些處理它的方法。

任何幫助表示讚賞!

如果您使用 mysqldump 導出數據,它會為您處理這些。例如:

mysql> select * from table1;
+------+-------------+
| id   | mystr       |
+------+-------------+
|    1 | \frac{1}{2} |
+------+-------------+

mysqldump -uroot -p database1 table1 > table1.sql

cat table1.sql | grep VALUES
INSERT INTO `table1` VALUES (1,'\\frac{1}{2}');

注意到轉義的反斜杠了嗎?和:

mysql -uroot -p database1 < table1.sql

mysql -uroot -p database1 -e "select * from table1"
Enter password: 
+------+-------------+
| id   | mystr       |
+------+-------------+
|    1 | \frac{1}{2} |
+------+-------------+

你是在什麼情況下執行的INSERT?大多數客戶端語言都有一種“轉義 MySQL 需要轉義的內容”的方法。這樣的函式將負責將反斜杠加倍並處理引號。

引用自:https://dba.stackexchange.com/questions/160970