2014-03-26 62 views
0

我一直在追逐一個JSON的bug,並發現如果我從磁盤加載文件以獲取不同的結果,以從db加載(顯然)相同的文件。mysql-存儲json,雙引號轉義問題

Mysql似乎是在偷我的逃生角色。 (我使用VBScript;我的連接字符串Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=foo;User=foo;Password=f00;Option=3;

做一個conn.execute(...)

update courses set config = '{"set": "value in \"here\" ok?"}' where id = 21; 
select config from courses where id = 21; 
// prints changed value {"set": "value in "here" ok?"} 

這是怎麼回事?爲什麼mysql取出我的\"並將它們變成"

如果我在服務器上使用工作臺(windows 2003)並在結果窗格中使用「從文件加載值」功能,我可以將json導入到該字段並保留正確的轉義序列值。但是做一個更新/插入,轉義序列字符是丟失

回答

0

MySQL也會轉義。如果您在檢索數據時需要轉義字符,則需要轉義轉義字符。例如。 「\\」。

+0

哎呀。所以我不能只在文本字段中存儲一個確切的值,並再次獲取相同的值,而不會跳過箍環?我應該堅持使用sqlite。有沒有一個雜注設置來禁用它?有一個設置 - http://dev.mysql.com/doc/refman/5.1/en/sql-mode.html#sqlmode_no_backslash_escapes - 我必須在每個查詢之前執行此操作嗎?這會吸球。 – frumbert

0

當您使用\\"時,問題將得到解決。
但是爲什麼你必須增加額外的\ ??
PHP將把\"視爲轉義序列並將其替換爲"並且您的最終查詢將與'{"set": "value in "here" ok?"}'類似。
通過添加額外的\你可以建立'{"set": "value in \"here\" ok?"}'(PHP將取代\\\