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