Oracle
 sql >> база данни >  >> RDS >> Oracle

Ако имаме набор от символи US7ASCII, защо ни позволява да съхраняваме не-ascii символи?

Работи, защото и двете условия са верни:

  • Клиентският набор от знаци е равен на набора от знаци на вашата база данни.
  • Наборът от знаци позволява всякакви стойности на байтове

Наборът от символи на вашата база данни и наборът от знаци на вашия клиент са зададени на US7ASCII . В такъв случай всички данни се записват/четат един по един без преобразуване, т.е. байтовете, които изпращате, се записват точно в базата данни. Вероятно не сте задали NLS_LANG изобщо от страната на вашия клиент, но Oracle го задава по подразбиране на AMERICAN_AMERICA.US7ASCII .

US7ASCII е 7-битово кодиране. Предполагам, че чисто ASCII приложение (което може да бъде доста трудно за намиране) просто би игнорирало 8-ия бит, който се съхранява в 8-битова архитектура. Други набори от знаци, напр. AL32UTF8 не позволявайте стойност на всеки байт. В този случай такива знаци ще бъдат заменени от контейнер, напр. ¿ или ? .

Забележете, вие задавате вашия клиентски набор от знаци на US7ASCII което най-вероятно не е правилно. Задайте го правилно към набора от знаци, който се използва от вашето приложение, след това ° ще бъдат заменени.

В случай, че използвате SQL*Plus, проверете кодовата страница на конзолата с командата chcp , респ. locale charmap . Задайте своя NLS_LANG съответно променлива на средата, преди да стартирате sqlplus.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Персонализирано SessionState Oracle SessionStateStoreProviderBase

  2. Oracle SQL несъответствие:COUNT(*) спрямо действителен набор от резултати

  3. Объркваща грешка за липсваща лява скоба в SQL оператор

  4. Йерархичен SQL въпрос

  5. Как да измерим ефективността на заявката в Oracle