有人可以解釋我如何將轉義字符串存儲在mysql表大小限制的列中。我的意思是,如果我有一個我定義大小的列(比如varchar(10)),如果我插入「abcdefghij」達到了限制,但是如果我插入「abcde'ghij」,我超出了限制最後一個字符串的結果是「abcde \'ghij」,儘管原始大小是10!如何控制這個?mysql轉義字符串存儲
回答
你要麼必須分配兩倍的空間值(假設有一個潛在的每一個字符需要轉義),或通過發射它的時候,不存儲時,它逃脫文本裙子的問題。
(缺點到第二個,當你寫作往往比你正在閱讀的是;但好處是,你可以處理有逃避的東西不同,這取決於如何或在哪裏它顯示的)。
更新:我知道,MySQL不會存儲用於插入額外的字符,但它也將在不使用\'
一個轉義的單引號 - 所以我只能假設,逃逸是什麼正在消耗或以其他方式利用它們正在存儲的值。 (例如,我見過人們存儲'
或"
,因爲這些值正在HTML中使用......如果有數據被用於非HTML目的的機會,我寧願採取命中和編碼發射。)
如果使用正確,則轉義字符不會存儲在數據庫中。它只在將數據傳遞給mysql時使用。 –
ANSI SQL轉義字符是'
,但是如果NO_BACKSLASH_ESCAPES
未啓用,MySQL也允許\
轉義。
轉義字符實際上並不佔用一個字符。只有這樣解析器才能正確讀取輸入。
例如,將「1234567890」或「12345678''0」都將佔用的空間等於金額並不會溢出約束的領域。
MySQL manual有一個相當完整的章節。
存儲的值不應包含反斜槓。正如上文所述,您不知何故將數據轉義兩次。
非常簡單的僞代碼的過程中應該怎麼樣子,:
data = "Let's party!"
data = escape(data) # Let\'s party
save(data)
## The database ignores the single quote, since it is escaped with a backslash
## but then removes the slash before storing data
read(data) # Let's party
,你需要如上表示,以恰好一次逃脫你的數據。
當使用準備好的查詢的查詢字符串字面量部分,你不應該逃脫你的數據和這樣做將導致您的問題。
$db = new mysqli('localhost', 'my_user', 'my_password', 'world');
$sql = 'INSERT INTO `blah` (field1,field2) VALUES (?,?)';
$query = $db->prepare($sql);
$query->bind_parms('ss',$no_escaping,$needed_here);
$query->execute();
編輯:你使用準備好的查詢嗎?
如果你是,我拼湊起來的一類此here.。
圍繞字符串轉義以及轉義字符的工作方式常常存在很多混淆。例如,給定此PHP代碼:
$string = "My \"string\" is cool.";
可變$string
不包含任何斜線。我在那裏寫的代碼有一些斜槓,但它們只是爲解析器的好處而存在,告訴它下面的引號不應該結束字符串。
這同樣適用於數據庫,但這是很多人絆倒的地方,因爲你經常建立一個由2個解析器讀取的字符串,首先是你的編程語言(例如:PHP),然後是數據庫。例如,要插入字符串""
(雙引號,不是一個空字符串)到數據庫,你需要一些代碼,看起來像這樣:
$sql = "INSERT INTO myTable VALUES (\"\\\"\\\"\")";
PHP讀取此,並解釋字符串是這個:
INSERT INTO myTable VALUES ("\"\"")
然後MySQL的讀取並解釋插入值:
""
(雙引號)
現在,這是全部排序,手頭的問題呢?你說你有一個逃脫的字符串?這是一個問題。 您應該只在最後時刻根據需要轉義字符串。如果你想存儲的數據爲5 o'clock
,則該字符串的值應爲5 o'clock
,不5 o\'clock
當您插入該值到一個SQL語句,那一刻,當你需要進行轉義。
$myString = '5 o\'clock'; // value is: 5 o'clock
$sql = sprintf(
"INSERT INTO myTable VALUES ('%s')",
mysql_real_escape_string($myString) // 5 o\'clock
);
echo $sql; // INSERT INTO myTable VALUES ('5 o\'clock');
- 1. Mysql刪除存儲的轉義字符
- 2. PHP MySQL如何正確存儲/轉義字符串
- 3. 存儲反轉字符串
- 4. 在php中存儲轉義字符mysql mysql
- 5. mySQL只存儲部分字符串
- 6. MySQL存儲和搜索字符串
- 7. MySQL字符串編碼存儲空間
- 8. 在mysql中存儲gziped字符串
- 9. MySQL存儲函數 - 追加字符串
- 10. 如何繞過mysql轉義字符串?
- 11. MySQL真正的轉義字符串
- 12. MYSQL真正轉義字符串觀察
- 13. Python/Mysql:拒絕轉義字符串!
- 14. mysql如何解釋轉義字符串?
- 15. MYSQL轉義字符串執行
- 16. MySQL轉義字符串問題
- 17. MySQL的轉義字符串幫助
- 18. Vb.net MySQL的:轉義字符串
- 19. 字符串轉義字符
- 20. 存儲字符串
- 21. 存儲字符串
- 22. 存儲字符串
- 23. Mysql的真正轉義字符串與普通字符串
- 24. 用於存儲在csv文件中的Java轉義字符串
- 25. 字符串轉義
- 26. 在字符串內存儲字符串?
- 27. 在字符串中存儲字符串
- 28. Markdown字符需要轉義才能將文本存儲爲JSON字符串?
- 29. 在轉義字符串中轉義字符串?
- 30. 字符串文字/轉義
我懷疑你是雙逃脫。我從來沒有遇到過這個問題。 –