VELG COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage') Her er søkeresultatene:
936 kinesisk forenklet GBK 950 kinesisk tradisjonell BIG5 437 amerikansk/kanadisk engelsk 932 japanere 949 koreansk 866 russisk 65001 unicode UFT-8
Da vi installerte SQL SERVER 2008, fordi vi valgte standardinstallasjonen, opprettet vi denNår det gjelder database, er standardsorteringsregelen valgt av serveren en SQL_Latin1_General_CP1_CI_AS sorteringsregel, slik at når tekst settes inn i datatabellen, vises den ikke normalt, alt med "? I stedet.
Når vi lager en database, må vi manuelt spesifisere en kollasjonsregel, som kan velges som Chinese_PRC_CI_AS sortering, som vist i figuren under
Sorteringsregler:
Sorteringsreglene som brukes i SQLSEVER2005 er SQL_Latin1_General_CP1_CI_AS, ikke de tre sorteringsreglene som kan vise forenklede kinesiske tegn korrekt:
Chinese_PRC_BIN,
Chinese_PRC_CI_AS,
Chinese_PRC_CS_AS。
Ta en titt på MS sin forklaring av kollasjon: Collation Rules Control Physical Storage of Strings in SQL Server 2005. Kollasjonsregler spesifiserer bitmønsteret som representerer hvert tegn og reglene for lagring og sammenligning av tegnbruk.
Det vil si, i SQLSERVER er sorteringen faktisk tegnkodingen.
Ved å kjøre følgende setning i spørringsanalysatoren, kan du få alle sorteringsreglene som støttes av SQL SERVER.
Velg * fra ::fn_helpcollations()
Sorteringsnavnet består av to deler, den første delen refererer til tegnsettet som støttes av denne sorteringen.
For eksempel: Chinese_PRC_CS_AI_WS
Den første halvdelen refererer til UNICODE-tegnsettet, og Chinese_PRC_refers til sorteringsreglene for det forenklede kinesiske tegnet UNICODE.
Den andre halvdelen av kollasjonen er betydningen av suffikset:
_BIN Binær sortering
_CI(CS) Enten det er kasusfølsomt, CI er ikke sensitivt, og CS er sensitivt
_AI (AS) Om man skal skille mellom aksenter, skiller ikke AI, AS skiller mellom aksenter
_KI(KS) Om man skal skille mellom pseudonymtyper, gjør ikke KI det, KS skiller mellom pseudonymtyper.
_WI(WS) er ikke bredde-distinkt, WS er ikke differensiert
Følsomt for små og små bokstaver: Velg dette alternativet hvis du vil ha sammenligninger for å behandle store og små bokstaver som ulike.
Skille mellom aksenter: Velg dette alternativet hvis du vil ha sammenligninger for å behandle aksenterte og utrykte bokstaver som ulige. Hvis du velger det alternativet, behandler sammenligningen også bokstaver med ulike aksenter som ulike.
Skille Kana: Velg dette alternativet hvis du vil at sammenligningen skal behandle Katakana- og Hiraka-dagsstavelsene som ulike.
Breddedifferensiering: Velg dette alternativet hvis du vil at sammenligningen skal behandle halvbredde- og fullbredde-tegn som ulike.
Etter å ha forstått kollasjonsreglene i SQLSERVER, kan følgende konklusjoner trekkes for problemet ovenfor:
1. Endre SQLSERVER-brukerdatabasen for å støtte sortering av kinesiske tegnsett.
2: For visning av kinesiske tegn??, men som ikke ønsker å endre sorteringsreglene i databasen, og ønsker å vise kinesiske tegn korrekt, anbefales det å bruke alle Unicode-typer i designet, altså de felttypene som starter med N, som nChar, nVarchar, for å vise kinesiske tegn korrekt.
3: Hvis du ikke vil endre sorteringsregelen eller felttypen, må du endre SQL-setningen, og for alle kinesiske tegn må du også legge til N foran for å vise det riktig. Vennligst se følgende to utsagn for spesifikke metoder:
Spørring: velg * fra tb_Cust hvor Fornavn=N'Wang'
Sett inn: sett inn tb_Cust(Fornavn, Etternavn, Kjønn) verdier (N'Wang', N'Xinhao', N'Mann')
Merk: For fremtiden vil det være mer krevende å endre servernivå-kollasjonsregelen etter SQLSERVER2000, og det er nødvendig å bygge opp hoveddatabasen på nytt.
For øyeblikket, for databaser som allerede er opprettet, kan vi også endre sorteringsmetoden på alternativsiden i egenskapsvinduet i databasen, slik at når tekst settes inn i datatabellen, vil det ikke komme noen feilmeldinger!
|