Welcome to Sign in | Help
in Search

Diacritice SQL 2005

Last post 11-17-2008, 6:06 PM by katalyn. 19 replies.
Page 2 of 2 (20 items)   < Previous 1 2
Sort Posts: Previous Next
  •  11-17-2008, 5:02 PM 6183 in reply to 6181

    Re: Diacritice SQL 2005

    katalyn:
    Poti vedea aici un exemplu de baza despre cum se specifica collation la run time: http://sqlserver.ro/forums/thread/4737.aspx

    pai nu e asa simplu.de exemplu in interfata mea de cautare introduc un nume romanesc pentru cautare collate-ul bazei fiind unul default ,trebuie eu ca programator sa-mi fac o functie sa vad carei culturi apartine sirul de cautare ca apaoi sa trimit query cu collate corespunzator sau stie databaseengine sa-mi gaseasca sirul meu de caractere eu avand in tabela respectiva nume din diferite culturi?


    Secolul XXI ori va fi religios ori nu va fi deloc
  •  11-17-2008, 5:43 PM 6184 in reply to 6183

    Re: Diacritice SQL 2005

    Nu am lucrat la site-uri cu diferite culturi dar daca as face ar trebui sa stiu pe ce cultura ma aflu si mai este un aspect... de unde stie el(sql server) daca sa tina cont de CASE SENSITIVE sau de CASE INSENSITIVE? (sunt domenii unde trebuie sa se tina cont si domenii unde nu trebuie sa se tine cont ... asta ar trebui stabilit inca de la inceput)

    Spre exemplu: caut "katalyn" pe sqlserver.ro  .... ar fi frumos ca in cazul in care caut "KATALYN" sa primesc acelasi rezultat dar daca scriu un cod asa cum sunt acele imagini care au rolul de a impiedica programele de tip robot sa publice spam-uri pe diferite blog-uri, sa se tina cont de litera mare/mica.

    Conform http://www.databasejournal.com/features/mssql/article.php/3302341/SQL-Server-and-Collation.htm rezulta ca collation nu are de-a face cu setul de caractere de care va dispune un camp, are de-a face cu reguli de comparare, case sensitive / insensitive etc.

    Asa ca idee ... daca ai un camp in care retii: ﺽﻕﻘﺶ; ệỞẺỶ; hX^ ... vei putea folosi nvarchar fara griji pentru ca ele sunt caractere UNICODE. Problema ar fi aceea ce pentru a retine un caracter unicode este nevoie de spatiu de stocare dublu fata de varchar adica 1 byte pentru varchar si 2 bytes pentru nvarchar.

    insert into tbl (a,b)
    values (N'ﺽﻕﻘﺶ','ﺽﻕﻘﺶ'),(N'ệỞẺỶ','ệỞẺỶ'),(N'hX^','hX^')

    SELECT [ a ], [ b ] FROM [dbo].[tbl]
    SELECT datalength([ a ]),datalength([ b ]) FROM [dbo].[tbl]

    SELECT [ a ], [ b ] FROM [dbo].[tbl] where [ a ] = N'ﺽﻕﻘﺶ'


    In exemplul meu de mai sus vei observa ca pe coloana [ b ] apar mai multe semne de intrebare ... asta pentru ca am facut insert cu caractere care sunt non-Unicode. Comparatia de la ultimul select functioneaza corect desi nu am facut nicio jonglerie cu collation...

    Cătălin D.
  •  11-17-2008, 5:57 PM 6185 in reply to 6183

    Re: Diacritice SQL 2005

    crestinul:
    [...] in interfata mea de cautare introduc un nume romanesc pentru cautare collate-ul bazei fiind unul default ,trebuie eu ca programator sa-mi fac o functie sa vad carei culturi apartine sirul de cautare ca apaoi sa trimit query cu collate corespunzator sau stie databaseengine sa-mi gaseasca sirul meu de caractere eu avand in tabela respectiva nume din diferite culturi?


    Nu, tu il trimiti ca un sir Unicode (prefixat cu N inainte de apostrof), iar in baza de date se stocheaza intr-o coloana de tip nvarchar. Collation-ul acelei coloane va fi luat in considerare doar atunci cand se face o comparatie intr-un WHERE sau o sortare intr-un ORDER BY.

    Razvan
  •  11-17-2008, 6:03 PM 6186 in reply to 6184

    Re: Diacritice SQL 2005

    katalyn:

    In exemplul meu de mai sus vei observa ca pe coloana Beer apar mai multe semne de intrebare ... asta pentru ca am facut insert cu caractere care sunt non-Unicode.


    Cred ca ai vrut sa spui ca pe coloana b apar semne de intrebare din cauza ca ai facut insert cu caractere Unicode, care sunt non-ASCII. Daca ar fi fost non-Unicode, n-aveai cum sa le scrii...

    De fapt ideea e ca nu apar in code page-ul (probabil 1252) care e atasat collation-ului implicit (probabil SQL_Latin1_General_CP1_CI_AS). Insa ceea ce e important de retinut este ca acel code page conteaza doar pentru valori de tip varchar, nu si pentru cele de tip nvarchar.

    Razvan
  •  11-17-2008, 6:06 PM 6187 in reply to 6186

    Re: Diacritice SQL 2005

    corect ... incercam sa gasesc o exprimare mai corecta a ceea ce vroiam sa spun si am gresit exprimarea

    Cătălin D.
Page 2 of 2 (20 items)   < Previous 1 2
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems