sql >> Databasteknik >  >> RDS >> Oracle

Definiera en teckenuppsättning för en kolumn För Oracle-databastabeller

Det enkla svaret är att, till skillnad från MySQL, kan teckenuppsättningar inte definieras på kolumn (eller tabell) nivå . Latin1 är inte heller en giltig Oracle-teckenuppsättning.

Teckenuppsättningar är konsekventa i databasen och kommer att ha specificerats när du skapade databasen. Du kan hitta din karaktär genom att fråga NLS_DATABASE_PARAMETERS kod> ,

select value
  from nls_database_parameters
 where parameter = 'NLS_CHARACTERSET'

Den fullständiga listan över möjliga teckenuppsättningar är tillgänglig för 11g r2 och för 9i eller så kan du fråga V$NLS_VALID_VALUES .

Det är möjligt att använda ÄNDRA SESSION uttalande för att ställa in NLS_LANGUAGE eller NLS_TERRITORY , men tyvärr kan du inte göra detta för teckenuppsättningen. Jag tror att detta beror på att en ändring av språket ändrar hur Oracle skulle visa lagrad data medan en ändring av teckenuppsättningen skulle ändra hur Oracle lagrar uppgifterna.

När du visar data kan du givetvis ange önskad teckenuppsättning i vilken klient du än använder.

Teckenuppsättningsmigrering är inte en trivial uppgift och bör inte göras lättvindigt.

Med en liten anmärkning varför försöker du använda Latin 1? Det skulle vara mer normalt att sätta upp en ny databas i något som UTF-8 (annars känd som AL32UTF8 - använd inte UTF8 ) eller UTF-16 så att du kan lagra multi-byte data effektivt. Även om du inte behöver det nu är det klokt att försöka - inga garantier i livet - att framtidssäkra din databas utan att behöva migrera i framtiden.

Om du vill ange olika teckenuppsättningar för olika kolumner i en databas är det bättre alternativet att avgöra om detta krav verkligen är nödvändigt och att försöka ta bort det. Om det definitivt är nödvändigt kan din bästa insats vara att använda en teckenuppsättning som är en superset av alla potentiella teckenuppsättningar. Ha sedan någon form av kontrollbegränsning som begränsar kolumnen till specifika hexadecimala värden. Jag skulle inte rekommendera att göra detta alls, risken för att misstag smyger sig in är enorm och det är extremt komplext. Dessutom renderar olika teckenuppsättningar olika hexadecimaler på olika sätt. Detta innebär i sin tur att du måste tvinga fram att en kolumn renderas med ett specifikt tecken, vilket är omöjligt eftersom det faller utanför databasens räckvidd.

1. Jag skulle vara intresserad av att veta situationen




  1. Hur kontrollerar jag om MySQL-resultat returneras tomma i PHP?

  2. Returnera en lista över servertriggerhändelser i SQL Server

  3. Kan SQL Server skicka en webbförfrågan?

  4. Lista rekursivt koncentrationer av Oracles DBA_DEPENDENCIES-vy