5

Python Web ページにデータを提供する次の MySQL クエリがあります。Web ページに曲名のリストがあり、句読点やスペースを無視してアルファベット順に並べたいと考えています。私の 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, '')...

4

2 に答える 2

3

MySQL 文字列リテラルは、マルチバイト文字のエスケープ シーケンスを提供しません。これは 7 年以上前からの機能要求であり、まだトリアージを待っています。すぐに解決されるとは思えません。

実際の文字を文字列リテラルに入れるか、目的のエンコーディングでその構成バイトを知る必要があります (この場合、 のようなものを使用できますCHAR())。

于 2012-05-01T07:41:35.827 に答える
-1

私の兄は、これを MySQL クエリを含む Python ページの一番上に置くように言いました。

from __future__ import unicode_literals

すべてが機能するようになりました!

于 2012-05-02T17:04:41.347 に答える