C# спящий режим | PL/SQL Oracle – строка разной длины, если она содержит диакритические знакиC#

Место общения программистов C#
Anonymous
C# спящий режим | PL/SQL Oracle – строка разной длины, если она содержит диакритические знаки

Сообщение Anonymous »

У меня есть пример строки, которую я пытаюсь поместить в качестве значения в столбец VARCHAR(255) (в базе данных oracle), используя объект nhibernate ISession.

Код: Выделить всё

abssssssssssssssssssssssssd RRRRRRRRRRRRRRRAAAAAAAAAAAAAAAąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąąassssssssssssssssss ansssssssssssssssssssssssssssssssssssssssssssssssssssssss ssssssssssssssssssssss

На уровне приложения я проверяю string.Length, и она соответствует ожиданиям (255). Кроме того, я также делаю следующий запрос к базе данных:

Код: Выделить всё

            const string lengthCheckSql = @"SELECT LENGTH(:valueToCheck) as charCount FROM DUAL";
var result = _session.CreateSQLQuery(lengthCheckSql)
.AddScalar("charCount", NHibernateUtil.Int32)
.SetString("valueToCheck", valueToCheck)
.UniqueResult();
Который также возвращает ожидаемое значение (255).
В конце, когда я вызываю Save из объекта ISession, я получаю исключение из база данных, которая ,,valueToCheck" имеет большую длину, разрешенную в базе данных;
,,(текущее: 352, разрешено: 255)"
Когда я меняю ,ą' на ,a ', тогда все работает нормально.
Я пытаюсь найти, в чем проблема: Nhibernate по умолчанию преобразует некоторые символы в другой Юникод, который моя база данных позволяет использовать?

Подробнее здесь: https://stackoverflow.com/questions/790 ... t-contains

Вернуться в «C#»