Collation

Collation

Stoolap provides the COLLATE() function for controlling string comparison and sorting behavior. Four collation modes are supported.

Collation Modes

Mode Aliases Behavior
BINARY   Exact byte-level comparison (case-sensitive)
NOCASE CASE_INSENSITIVE Case-insensitive comparison
NOACCENT ACCENT_INSENSITIVE Accent-insensitive comparison (strips diacritical marks)
NUMERIC   Numeric-aware string comparison

Syntax

COLLATE(value, 'mode')

BINARY (Case-Sensitive)

Performs exact, case-sensitive comparison:

SELECT * FROM items WHERE COLLATE(name, 'BINARY') = 'Apple';
-- Matches 'Apple' only, NOT 'apple' or 'APPLE'

NOCASE (Case-Insensitive)

Ignores letter casing during comparison:

SELECT * FROM items
WHERE COLLATE(name, 'NOCASE') = COLLATE('apple', 'NOCASE');
-- Matches 'Apple', 'apple', 'APPLE'

NOACCENT (Accent-Insensitive)

Strips diacritical marks (accents) before comparison:

SELECT * FROM items
WHERE COLLATE(LOWER(name), 'NOACCENT') = COLLATE('cafe', 'NOACCENT');
-- Matches 'Cafe', 'cafe', 'CAFE'

Works with various accented characters:

-- Matches 'Nacao', 'nacao', 'NACAO'
SELECT * FROM items
WHERE COLLATE(LOWER(name), 'NOACCENT') = COLLATE('nacao', 'NOACCENT');

Combining Collations

Collation functions can be nested for combined effects:

-- Case-insensitive AND accent-insensitive
SELECT * FROM items
WHERE COLLATE(COLLATE(name, 'NOCASE'), 'NOACCENT')
    = COLLATE(COLLATE('nacao', 'NOCASE'), 'NOACCENT');

Collation in ORDER BY

Use collation to control sort order:

-- Case-insensitive sort: 'Apple', 'apple', 'APPLE' sort together
SELECT * FROM items ORDER BY COLLATE(name, 'NOCASE');