我正在開發一個項目,我必須確保不會在MySQL 5.5數據庫後端存儲具有MySQL文檔所謂的「尾隨空格」(這主要是由於oddities with char
and varchar
fields, unique indexes and comparisons)導致的字符串。究竟是MySQL中的「尾隨空間」究竟是什麼?
這基本上意味着應用程序必須在將所有字符串存儲在數據庫中之前刪除「尾隨空格」。雖然這一眼看起來很容易,但我正在問自己在這種情況下究竟有什麼(尾隨)空格。
當然,ASCII 0x20是一個空格。但是還有許多其他(unicode)字符,通常被認爲是空格(至少在MySQL世界之外)。例子是U + 00A0(非休息空間)和U + 200B(零寬度空間),以命名其中的兩個;我很確定他們中至少有十二個人。
我非常強烈地認爲MySQL在上面提到的上下文中只考慮了通常的空格字符(ASCII 0x20)作爲空間,但我想確切地知道。我在MySQL文檔或其他地方沒有看到有關這方面的提示,所以我在這裏問。
您最安全的賭注可能是'RTRIM(value)',因爲它會隨着MySQL的「尾部空間」定義自動更新。 – Marvin
@Marvin感謝您的建議和+1。但是由於某些原因,我想讓應用程序儘可能地做更多的工作(包括修剪)。此外,我一般對這個問題的答案感興趣。我們是否需要查找一些SQL規範來獲得這個答案? – Binarus
MySQL只會移除單個ascii 0x20字符(「空格」),沒有其他unicode值(不稱爲空格,但「空間」)。這就是說,雖然不太可能,但不能保證它在某些時候不會改變 - 但它肯定會被記錄下來。不幸的是,查看SQL標準並不會幫助你,因爲'rtrim'和'ltrim'不管用什麼標準函數(儘管它將'space'定義爲'trim'的默認值)。但最終您將不得不查看源代碼,信任互聯網或測試(有限數量的)unicode空間。 –
Solarflare