Mysql
不同的字元,相同的ASCII碼?
我有這個查詢會引發兩個結果:
SELECT id FROM table1 WHERE id like 'nm041033%'
- nm0410331
- nm0410331
這個稍微不同的查詢只拋出一個結果:
SELECT id FROM table1 WHERE id='nm0410331'
- nm0410331
我試圖檢查最後一個字元的 ASCII 並得到相同的結果:
SELECT id,ascii(substr(id,9,1)) FROM table1 WHERE id like 'nm041033%'
- nm0410331 49
- nm0410331 49
我想這是一個罕見的編碼問題。我該如何解決?
PS:該欄位
id
是主鍵。字元集是latin1_general_ci
,並且值是使用 PHP 插入的utf8_decode()
。**更新:**我將字元集更改為
ascii_general_ci
,現在這個查詢給了我零結果:SELECT id FROM table1 WHERE id='nm0410331'
但是,這兩個 id 還不一樣。如果我使用
SELECT DISTINCT
或者GROUP BY
我得到兩行。PS:最後一個字元不是你可以用鍵盤輸入的數字。
感謝Akina的洞察力,他建議用於
HEX()
檢查該欄位,我在其中一個值的末尾發現了一個額外的“0A”字節。刪除主鍵約束(以避免臨時重複 id)後,我使用:
UPDATE table1 SET id = TRIM(TRAILING UNHEX('0A') FROM id);
並且能夠解決它。PS:對於未來的Google人,使用
SELECT id FROM table1 WHERE id like 'nm0410331%'
也可以讓我注意到我的愚蠢問題……
理想情況下,您不必“清理”數據-您應該使用TRIM填充它們-並使用適當的轉義功能…如果換行符可以潛入那裡-很可能也是單引號..你好, 歡迎使用 SQL 注入….