2011-10-06 72 views
3

我一直在試圖找到一個解決這個問題,但還沒有任何運氣。我知道這裏有幾個類似的問題,但它們都不是真正適用的更復雜的場景。好吧,這個問題:MySQL的ORDER BY結果不是拼音

我有一個交易收款人及其相關類的列表非常簡單的表。該結構是id - intname- varcharcat - varchar

我試圖做一個簡單的查詢以字母順序呈現的收款人名稱,使用while環加入到一個選擇框。無論我是否使用ASC或DESC,它們都以不明顯的順序顯示。條目的開頭或結尾沒有空白。

這是查詢條件 - SELECT name FROM payees ORDER BY name 當嘗試按照字母順序在phpMyAdmin中對它們進行排序時,我得到了相同的結果。 id是一個自動增量int字段和主鍵。

謝謝!

UPDATE

下面是示例輸出 - SELECT name FROM payees ORDER BY name ASC

  • Sheetz
  • 沃爾格林
  • 阿拜的
  • 美元基本
  • 埃克森
  • 周的iTunes
  • 紅盒
  • 星巴克
  • 沃爾瑪

整理是utf8_unicode_ci

解決

榮譽給@JohnFlatness解決了這個難題。這實際上是代碼中的一個缺陷 - 這個項目有一個移動版和普通版。移動版本的腳本中存在一個錯誤,它在name列條目的開頭添加了一個空格。我點檢的參賽作品很好,錯過了那些有空白的地方。

感謝您的幫助 - 通過的意見,第一個解決了我笑

+2

中文O w製備結束美。 –

+0

輸出數據的樣本是什麼樣的?您的查詢看起來很好,因此請檢查數據中的實際內容。桌子上的字符集/排序規則是什麼?這可能影響排序,例如你在AZ的條目區分大小寫排序之前來AZ –

+0

這不是查詢 - 這是顯示... – Randy

回答

1

這些領域可能不包含正好你認爲他們做的數據。嘗試傾銷SELECT HEX(name) FROM payees的輸出以準確顯示每個字段中的內容。以下是輸出應該是供參考:

417262792773     Arby's 
446F6C6C61722047656E6572616C Dollar General 
4578786F6E      Exxon 
6954756E6573     iTunes 
52656420426F78     Red Box 
53686565747A     Sheetz 
537461726275636B73    Starbucks 
57616C677265656E73    Walgreens 
57616C6D617274     Walmart 

演示:http://sqlize.com/904pho3tUG

0
SELECT name FROM payees ORDER BY name trim(ASC) 

還要驗證你的表排序規則* _CI