Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum kann ich ein Zeichen verwenden, das nicht Teil eines Zeichensatzes ist (Windows-1252)?

Sie verwenden nicht wirklich Zeichen außerhalb des Zeichensatzes der Seite und der Datenbank.

Da die Seite Windows-1252-kodiert ist, sagt der Browser, wenn Sie Alt+251 in ein Formularfeld eingeben und dann die Daten posten:

"Hey this char is not apart of windows-1252 and I need to only send back data
 which is in windows-1252, so I will do the best I can and send back the 
 html character code of char √  -- oh well, I wish I could send back
 1 character, since I cannot I will send back 7."

Und wie Sie bemerken, sind dies 7 verschiedene Zeichen, die im Windows-1252-Zeichensatz enthalten sind.

Wäre die Seite mit einem Multibyte-Zeichensatz kodiert worden, würde der Browser etwas zurücksenden, was als 1 Zeichen betrachtet wird.

Wie können Sie es also abfragen?

 select * from tab where field like '%√%'

Was Sie haben, ist das HTML-Zeichen des Quadratwurzelsymbols:https://www .google.com/#q=html+Zeichen+Codes

Aktualisierung:

Hier ist ein sehr guter Artikel, der erklärt, was passiert:http://htmlpurifier.org/docs/ enduser-utf8.html

 "...once you start adding characters outside of your encoding... 
 [the browser might] replace the character with a character entity reference...."

Auch wenn Sie Alt+251 auf einem Windows-Rechner eingeben, wird das Quadratwurzelsymbol eingefügt, das in Unicode U-221A ist.

Das Drücken von Alt+251 ist wie ein Tastaturmakro zum Einfügen von Unicode, es ist U-221A.