【问题标题】:How to ignore special characters when using ORDER BY in a MySQL query在 MySQL 查询中使用 ORDER BY 时如何忽略特殊字符
【发布时间】:2012-05-10 19:25:49
【问题描述】:

我有以下 MySQL 查询,它为 Python 网页提供数据。在网页上,我有一个歌曲名称列表,我希望它按字母顺序排列,忽略标点符号和空格。我的 MySQL 数据库是 UTF-8 编码的,有些需要忽略的标点符号是特殊字符,比如弯撇号等。

SELECT * FROM Tracks\
JOIN Artists USING (ArtistID)\
JOIN Albums USING (AlbumID)\
JOIN Songs USING (SongID)\
ORDER BY UPPER(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(\
REPLACE(SoName, ' ', ''), /* space */\
                        ',', ''), /* comma */\
                        '.', ''), /* period */\
                        ':', ''), /* colon */\
                        ';', ''), /* semicolon */\
                        '!', ''), /* exclamation point */\
                        '?', ''), /* question mark */\
                   '\u201c', ''), /* left curly double quote */\
                   '\u201d', ''), /* right curly double quote */\
                   '\u2019', ''), /* right curly single quote (apostrophe) */\
                   '\u2013', ''), /* n-dash */\
                   '\u2014', ''), /* m-dash */\
                   '\u2026', '') /* ellipsis */), (SongID), UPPER(AlTitle)

我的查询中的REPLACE 似乎非常适合非特殊字符,如空格、逗号、句点等,但它似乎跳过了特殊字符。

我的猜测是字符需要以不同的格式书写。我尝试了以下但没有成功: REPLACE(SoName, '\u2026', '') REPLACE(SoName, u'\2026', '') REPLACE(SoName, 0xE280A6, '')...

【问题讨论】:

  • 谢谢你的问题是我的回答,很有帮助。

标签: mysql utf-8 replace sql-order-by special-characters


【解决方案1】:

我的兄弟让我把它放在包含 MySQL 查询的 Python 页面的最顶部:

from __future__ import unicode_literals

现在似乎一切正常!

【讨论】:

    【解决方案2】:

    MySQL string literals 不为多字节字符提供转义序列。这已经是a feature request 超过 7 年了,仍在等待分流:我不会屏住呼吸,它很快就会得到解决。

    您必须将实际字符放入您的字符串文字中,或者以您想要的编码了解其组成字节(在这种情况下,您可以使用类似 CHAR() 的内容)。

    【讨论】:

    • 输入实际字符(例如REPLACE(SoName, '…', ''))给我SyntaxError: Non-ASCII character '\xe2' in file /Users/samuelbradshaw/Sites/praises/index.py on line 46, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details。有什么我可以做的吗?我如何“知道 [我的] 所需编码中的组成字节”?
    • 这将我们带入 Python 领域...如果您在该领域使用 \u0000 转义序列,您会没事的。如果您不确定如何执行此操作,我建议您打开一个标记为 python 的新问题,其中包含您的 Python 代码。
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多