Хранение UTF-16/Unicode данных в SQL Server

Comparator является интерфейсом только для классов, которые можно сравнивать. Речь идет о сравнении любых двух объектов. Ни больше ни меньше. Из документов:

@param o1 первый объект для сравнения.

@param o2 второй объект для сравнения.

@ вернуть отрицательное целое число, ноль или положительное целое число, так как первый аргумент меньше, равен или больше второго.

blockquote>

Сортировка - это совсем другое. Он использует компаратор (было бы трудно что-либо сортировать, не зная, как сравнивать два элемента), поэтому вы можете предоставить свой собственный способ сортировки коллекции.

Но как это отсортировано? Все, что мы знаем о сортировке через Collections.sort(collection, comparator), это то, что сортировка стабильна. Подробнее о сортировке: https://www.geeksforgeeks.org/sorting-algorithms/

.

5
задан Solomon Rutzky 30 September 2015 в 14:58
поделиться

2 ответа

Строковые функции отлично работают со строками символов Юникода; те, которые заботятся о количестве символов, рассматривают двухбайтовый символ как один символ, а не два символа. Единственные, на что нужно обратить внимание - это len () и datalength (), которые возвращают разные значения при использовании юникода. Конечно, они возвращают правильные значения - len () возвращает длину в символах, а datalength () возвращает длину в байтах. Просто они оказываются разными из-за двухбайтовых символов.

Итак, до тех пор, пока вы используете правильные функции в вашем коде, все должно работать прозрачно.

РЕДАКТИРОВАТЬ : просто дважды проверил Электронные книги , данные Unicode, похоже, без проблем работали со строковыми функциями начиная с SQL Server 2000.

РЕДАКТИРОВАТЬ 2 : Как указано в комментариях, SQL Server ' Строковые функции не поддерживают полный набор символов Unicode из-за отсутствия поддержки анализа суррогатов вне плоскости 0 (или, другими словами, строковые функции SQL Server распознают только до 2 байтов на символ.) SQL Server будет хранить и возвращать данные правильно, однако любая строковая функция, которая полагается на количество символов, не будет возвращать ожидаемые значения. Наиболее распространенный способ обойти это, кажется, либо обрабатывать строку вне SQL Server, либо использовать интеграцию CLR для добавления функций обработки строк с поддержкой Unicode.

однако любая строковая функция, которая полагается на количество символов, не будет возвращать ожидаемые значения. Наиболее распространенный способ обойти это, кажется, либо обрабатывать строку вне SQL Server, либо использовать интеграцию CLR для добавления функций обработки строк с поддержкой Unicode.

однако любая строковая функция, которая полагается на количество символов, не будет возвращать ожидаемые значения. Наиболее распространенный способ обойти это, кажется, либо обрабатывать строку вне SQL Server, либо использовать интеграцию CLR для добавления функций обработки строк с поддержкой Unicode.

2
ответ дан 14 December 2019 в 13:46
поделиться

кое-что добавить, что я только что выучил на собственном горьком опыте:

если вы используете поле «n» в oracle (я использую 9i), и доступ к нему через .net oracleclient, кажется, будет работать только параметризованный sql ... префикс unicode N'string, похоже, не поможет, если у вас есть встроенный sql.

и под словом «работа» я имею в виду: он потеряет все символы, не поддерживаемые базовой кодировкой. Так что в моих случаях английские символы работают нормально, кириллица превращается в вопросительные знаки / мусор.

это более полное обсуждение темы: http://forums.oracle.com/forums/thread.jspa?threadID=376847

Интересно, можно ли установить переменную ORA_NCHAR_LITERAL_REPLACE в строке подключения или что-нибудь.

-2
ответ дан 14 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: