См .: https://stackoverflow.com/a/47181640/5507619
Настройка базы данных
Существует настройка конфигурации базы данных, которую вы можете установить на создание базы данных . Однако он основан на Unicode.
CREATE DATABASE yourDB USING COLLATE UCA500R1_S1
Алгоритм сортировки Unicode по умолчанию реализован ключевым словом UCA500R1 без каких-либо атрибутов. Поскольку UCA по умолчанию не может одновременно охватывать последовательность сортировки всех языков, поддерживаемых Unicode, необязательные атрибуты могут быть заданы для настройки порядка UCA. Атрибуты разделяются символом подчеркивания (_). Ключевое слово UCA500R1 и любые атрибуты образуют имя сопоставления UCA.
Атрибут Strength определяет, будет ли учитываться ударение или регистр при сопоставлении или сравнении текстовых строк. В письменных системах без регистра или акцента атрибут Strength контролирует аналогичные важные функции.
Возможные значения: первичное (1), вторичное (2), третичное (3), четвертичное (4) и тождество (I). Игнорировать:
- Акцент и кейс, использовать первичный уровень прочности
- только для случая, используйте дополнительный уровень прочности
- ни акцент, ни падеж, используйте третичный уровень прочности
Практически все персонажи можно различить по первым трем уровням силы, поэтому в большинстве локалей атрибут силы по умолчанию установлен на третичном уровне. Однако если для атрибута Alternate (описанного ниже) задано смещение, то уровень четвертичной силы можно использовать для разрыва связей между символами пробела, знаками препинания и символами, которые в противном случае игнорировались бы. Уровень прочности идентификатора используется для различения похожих символов, таких как символ МАТЕМАТИЧЕСКИЙ ЖИРНЫЙ МАЛЫЙ А (U + 1D41A) и МАТЕМАТИЧЕСКИЙ ИТАЛИЧЕСКИЙ МАЛЕНЬКИЙ символ А (U + 1D44E).
Установка атрибута Strength на более высокий уровень замедлит сравнение текстовых строк и увеличит длину ключей сортировки.
Примеры:
- UCA500R1_S1 будет сопоставлять "role" = "Role" = "rôle"
- UCA500R1_S2 будет сопоставлять "role" = "Role" <"rôle" </li>
- UCA500R1_S3 будет сопоставлять "роль" <"Роль" <"роль" </li>
Это сработало для меня. Как видите, ..._ S2 тоже игнорирует регистр.
При использовании более новой стандартной версии она должна выглядеть следующим образом:
CREATE DATABASE yourDB USING COLLATE CLDR181_S1
Ключевые слова для сопоставления :
UCA400R1
= Unicode Standard 4.0 = CLDR версия 1.2
UCA500R1
= Unicode Standard 5.0 = CLDR версия 1.5.1
CLDR181
= Unicode Standard 5.2 = CLDR версия 1.8.1
Если ваша база данных уже создана, должен быть способ изменить настройку .
CALL SYSPROC.ADMIN_CMD( 'UPDATE DB CFG USING DB_COLLNAME UCA500R1_S1 ' );
У меня есть проблемы с выполнением этого, но, насколько я знаю, это должно сработать.
Строка сгенерированной таблицы
Другие варианты, например, генерация строки в верхнем регистре :
CREATE TABLE t (
id INTEGER NOT NULL PRIMARY KEY,
str VARCHAR(500),
ucase_str VARCHAR(500) GENERATED ALWAYS AS ( UPPER(str) )
)@
INSERT INTO t(id, str)
VALUES ( 1, 'Some String' )@
SELECT * FROM t@
ID STR UCASE_STR
----------- ------------------------------------ ------------------------------------
1 Some String SOME STRING
1 record(s) selected.