Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kunci utama peka huruf besar/kecil dari tipe nvarchar di mana !=ss

Ah, tapi itu adalah mungkin karena ada susunan yang menangani ini secara alami (sebenarnya beberapa, tetapi semuanya dalam "keluarga" yang sama):Hungarian_Technical_* (well, minus variasi CaseSensitive (CS) dan Binary (BIN / BIN2)). Tentu saja, saya masih tidak yakin ini adalah pilihan yang baik untuk PK, tetapi tidak ada alasan untuk tidak menjadi UNIQUE INDEX .

SELECT tmp.*,
       IIF(tmp.[First] = tmp.[Second] COLLATE Hungarian_Technical_CI_AI,
           N'Equal',
           N'NOT EQUAL') AS [Result]
FROM (
      SELECT N'weiß', N'Weiß', N'Equal'
      UNION ALL
      SELECT N'weiss', N'Weiss', N'Equal'
      UNION ALL
      SELECT N'weiß', N'weiss', N'NOT Equal'
      UNION ALL
      SELECT N'Weiß', N'Weiss', N'NOT Equal'
      UNION ALL
      SELECT N'weiß', N'Weiss', N'NOT Equal'
      ) tmp ([First], [Second], [Ideal]);

Hasil:

First   Second  Ideal       Result
weiß    Weiß    Equal       Equal
weiss   Weiss   Equal       Equal
weiß    weiss   NOT Equal   NOT EQUAL
Weiß    Weiss   NOT Equal   NOT EQUAL
weiß    Weiss   NOT Equal   NOT EQUAL

Ada 24 total collations yang akan bekerja dengan cara ini. Anda dapat menemukannya melalui:

SELECT hc.*
FROM sys.fn_HelpCollations() hc
WHERE hc.name LIKE N'Hungarian[_]Technical%'
AND hc.name LIKE N'%[_]CI%'
ORDER BY hc.name;

Mereka adalah:

Jika versi 100 collation tersedia (artinya:Anda menggunakan SQL Server 2008 atau yang lebih baru), lalu gunakan itu dan bukan collation tanpa nomor versi di namanya.

EDIT:
Saya menemukan beberapa info tambahan tentang susunan "Teknis Hongaria" yang mungkin menarik:

  • MySQL:Hungarian collation -- Ini adalah arsip diskusi listserv oleh beberapa pengembang MySQL yang mencoba mencari tahu secara spesifik tentang cara mengimplementasikan pemeriksaan. Rupanya ia memiliki beberapa aturan yang rumit, karena setidaknya sebagian perlu menyamakan beberapa karakter menjadi satu karakter untuk menyortir (cari bagian "3. Aturan digraf/trigraf khusus"). Ini mungkin menyebabkan beberapa perilaku yang tidak terduga. Kombinasi huruf tertentu dicatat di bagian itu sehingga setidaknya memudahkan untuk menyiapkan kasus uji untuk membantu menentukan apakah aturan penyortiran tidak valid menggunakan susunan ini.

  • Mengapa ada begitu banyak(106) susunan bahasa Hongaria? -- Ini adalah diskusi di social.msdn yang memiliki beberapa info menarik. Ada komentar di sana oleh Erland Sommarsko di mana dia menyatakan:

    Mengingat diskusi dari pengembang MySQL tentang aturan yang rumit, hasil pengujian tersebut tampaknya tidak terlalu mengejutkan.

Jadi, kedua item ini mungkin harus diperhitungkan dalam memutuskan apakah akan menempuh rute mudah atau tidak dengan hanya menyetel bidang NVARCHAR ke salah satu kumpulan Teknis Hongaria ini, atau mengikuti rekomendasi @GarethD dari kolom yang dihitung.

Untuk info lebih lanjut tentang bekerja dengan string dan collations, silakan kunjungi:Info Collations



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Menjalankan Pemantauan Kueri

  2. SQL:Bagaimana saya bisa mendapatkan nilai atribut dalam tipe data XML?

  3. Bagaimana Anda bisa mengonversi tinyint t-sql ke integer di c #?

  4. Cara menggunakan bidang terhitung di bidang lain dari kueri yang sama

  5. Bagaimana SQL Server menghasilkan nilai dalam kolom identitas?