sql >> Databasteknik >  >> RDS >> PostgreSQL

Unicode-normalisering i Postgres

Jag tror att detta är ett Pg-fel.

Enligt min åsikt borde PostgreSQL normalisera utf-8 till förkomponerad form innan kodningskonverteringar utförs. Resultatet av de visade omvandlingarna är felaktiga.

Jag tar upp det på pgsql-bugs ... klart.

http://www.postgresql.org/message-id/example @sqldat.com

Du borde kunna följa tråden där.

Redigera :pgsql-hackers verkar inte hålla med, så det är osannolikt att detta kommer att ändras i en hast. Jag rekommenderar starkt att du normaliserar din UTF-8 vid dina programinmatningsgränser.

BTW, detta kan förenklas ner till:

regress=> SELECT 'á' = 'á';
 ?column? 
----------
 f
(1 row)

vilket är rent crazy-talk, men är tillåtet. Den första är förkomponerad, den andra inte. (För att se det här resultatet måste du kopiera och klistra in, och det fungerar bara om din webbläsare eller terminal inte normaliserar utf-8).

Om du använder Firefox kanske du inte ser ovanstående korrekt; Chrome återger det korrekt. Här är vad du bör se om din webbläsare hanterar sönderdelad Unicode korrekt:




  1. mysqli_stmt::num_rows() returnerar fel värde

  2. Formatera delvis okända datum med DateTime() från en databas?

  3. beräkna timmar baserat på öppettider i Oracle SQL

  4. Är det möjligt att konvertera mysql-tabellnamn från gemener till versaler i linux?