sql >> Databasteknik >  >> RDS >> Oracle

Varför kan jag använda ett tecken som inte är en del av en teckenuppsättning (windows-1252)?

Du använder egentligen inte tecken utanför sidans och databasens teckenuppsättning.

Eftersom sidan är Windows-1252-kodad, om du anger Alt+251 i ett formulärfält och sedan postar data, säger webbläsaren:

"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."

Och om du märker, det är 7 olika tecken som finns i teckenuppsättningen i windows-1252.

Om sidan hade kodats med en flerbyteteckenuppsättning skulle webbläsaren skicka tillbaka något som anses vara ett tecken.

Så hur kan du fråga det?

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

Det du har är html-tecknet för kvadratrotssymbolen:https://www .google.com/#q=html+tecken+koder

Uppdatering:

Här är en mycket bra artikel som förklarar vad som händer: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...."

Även när du anger Alt+251 på en Windows-maskin, infogar den kvadratrotssymbolen som i Unicode är U-221A.

Att trycka på Alt+251 är precis som ett tangentbordsmakro för att infoga Unicode, det är U-221A.




  1. Apache 2.4 med PHP 5.4:ingen mysql tillgänglig

  2. Kör MySQL *.sql-filer i PHP

  3. Postgresql dump-tillstånd nekad

  4. ORACLE Efter uppdateringstrigger:löser ORA-04091 mutationstabellfel