sql server - Unicode-Zeichen in der SQL-Tabelle

Translate

Ich verwende SQL Server 2008 R2 Enterprise. Ich codiere eine Anwendung, die Datensätze aus SQL-Tabellen einfügen, aktualisieren, löschen und auswählen kann. Die Anwendung macht Fehler, wenn es um die enthaltenen Datensätze gehtspezielle Charakterewie ć, č š, đ und ž.

Folgendes passiert:

Der Befehl:

INSERT INTO Account (Name, Person) 
VALUES ('Boris Borenović', 'True') 
WHERE Id = '1'

Fügt einen neuen Datensatz ein, aber das Feld Name istBoris Borenovic, also Charakterćwird geändert inc.

Der Befehl:

SELECT * FROM Account 
WHERE Name = 'Boris Borenović'

gibt den korrekten Datensatz zurück, also wieder das Zeichenćwird ersetzt durchcund der Datensatz wird zurückgegeben.

Fragen:

  1. Ist es möglich, SQL Server zum Speichern derćund anderespezielle Charakterezuvor erwähnt?
  2. Ist es noch möglich, wenn die vorherige Frage gelöst ist, Sql in die Lage zu versetzen, das zurückzugeben?Boris BorenovićAufzeichnen, auch wenn die Abfrage danach fragtBoris Borenovic?

Wenn ich also Datensätze speichere, möchte ich, dass SQL genau das speichert, was angegeben ist, aber wenn ich die Datensätze abrufe, möchte ich, dass es in der Lage ist, das zu ignorierenspezielle Charaktere. Danke für all die Hilfe.

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

1) Stellen Sie sicher, dass die Spalte vom Typ nvarchar und nicht von varchar (oder nchar für char) ist.

2) VerwendenN'am Anfang von String-Literalen, die solche Strings enthalten, zN'Boris Borenović'

3) Wenn Sie eine Clientbibliothek (z. B. ADO.Net) verwenden, sollte diese Unicode-Text verarbeiten, sofern die Parameter wiederum als nvarchar / nchar anstelle von varchar / char markiert sind

4) Wenn Sie Akzente abfragen und ignorieren möchten, können Sie Ihrer Auswahl eine COLLATE-Klausel hinzufügen. Z.B:

SELECT * FROM Account 
WHERE Name = 'Boris Borenovic' COLLATE Latin1_General_CI_AI

Wobei _CI_AI bedeutet, dass die Groß- und Kleinschreibung nicht berücksichtigt wird und die Groß- und Kleinschreibung nicht berücksichtigt wird, sollten alle Zeilen mit allen Varianten des "c" am Ende zurückgegeben werden.

5) Wenn die Spalte in der Tabelle Teil einer UNIQUE / PK-Einschränkung ist und Sie sowohl "Boris Borenović" als auch "Boris Borenovic" enthalten müssen, fügen Sie der Spaltendefinition eine COLLATE-Klausel hinzu, verwenden Sie diesmal jedoch eine Sortierung mit "_AS" am Ende, was besagt, dass es akzentempfindlich ist.

Quelle
Translate

Verwenden Sie diese Option, damit SQL Server Sonderzeichen speichern kannnvarcharAnstatt vonvarcharfür den Spaltentyp.

Beim Abrufen können Sie eine akzentunempfindliche Kollatierung erzwingen, sodass die verschiedenen Cs ignoriert werden:

WHERE Name = 'Boris Borenović' COLLATE Cyrillic_General_CI_AI

Hier steht CI für Case Insensitive und AS für Accent Insensitive.

Quelle
Translate

Ich habe mit dem gleichen Problem konfrontiert und nach einigen Recherchen:

https://dba.stackexchange.com/questions/139551/how-do-i-set-a-sql-server-unicode-nvarchar-string-to-an-emoji-or-supplementary

Was ist der Unterschied zwischen varchar und nvarchar?

Ich habe die Art der benötigten Felder geändert:

ALTER TABLE [table_name] ALTER COLUMN column_name [nvarchar] 
GO

Und es funktioniert!

Quelle
Über den Autor