Set case and accent sensitivity on a per-column basis
Summarize
Summary of Set case and accent sensitivity on a per-column basis
By default, text searches in ServiceNow table columns are insensitive to case and accent differences (for example, "A" equals "a" and "A" equals "Å"). To enforce case and accent sensitivity on specific columns, administrators can use thelocale text matchfeature starting from Zurich Patch 9 and Australia Patch 2. This feature modifies text search behavior to only return exact matches considering case and accent, overriding default SQL collation for those columns.
Show less
Configuring Locale Text Match
- Set the column attribute i18nlocaletextmatch=true on target columns of type String, Translated Text, or Translated Field via the
sysdictionarytable. - To enable case and accent sensitivity in the product UI for table text searches, also set the global system property com.glide.db.uii18nlocaletextmatch=true.
- This attribute cannot be combined with certain other attributes such as
i18nsessionlanguagesortableor when the propertycom.glide.db.sessionlanguagecollationfeatureis enabled. - Once set, the behavior applies to all queries on the column, including ACLs, business rules, and scripts.
Additional Methods to Control Locale Text Match
To manage case and accent sensitivity dynamically or in specific contexts, use:
- GlideRecord API: Use
setLocaleTextMatch(Boolean)in scripts to enable or disable locale text match for a specific query. - URL Parameter: Add
sysparmlocaletxtmatch=true|falseto URLs to toggle locale text match for list queries. - Table API: Include the locale text match parameter in REST API queries to control sensitivity in data retrieval.
Priority of Settings
The locale text match settings follow a priority order when multiple configurations exist:
- URL parameter
sysparmlocaletxtmatch(highest priority) - Column attribute
i18nlocaletextmatch - Global property
com.glide.db.uii18nlocaletextmatch(lowest priority)
Practical Benefits
Implementing locale text match enables ServiceNow customers to:
- Perform precise text searches that respect case and accent differences at the column level.
- Customize search sensitivity based on business needs without affecting the entire database or application.
- Control search behavior dynamically through scripting or URL parameters for specific use cases.
Thorough testing is recommended to ensure the behavior meets expectations across all queries, including security and business logic layers.
Set locale text match to provide case and accent sensitivity when searching the text of table columns. The default behavior for text searching in table columns is insensitive to case and accent (diacritic) variations, but you can enforce sensitivity using locale text match.
Overview of locale text match
By default, text searching in table columns is insensitive to case (example: A vs. a) and accent or diacritic (example: A vs. Å).
As an admin, you can modify this behavior for the fields you specify by setting the column attribute i18n_locale_text_match and a sys property com.glide.db.ui_i18n_locale_text_match. When set to true, text search on the column retrieves only exact matches for case and accent.
Locale text match is available from Zurich Patch 9 and Australia Patch 2.
- Setting locale text match overrides the collation of SQL queries for the specific column.
- You can't set the i18n_locale_text_match column attribute when the following attribute is set on the same column: i18n_session_language_sortable or if property com.glide.db.session_language_collation_feature=true. For more information see Sorting according to the session language.
- Test the case and accent sensitive behavior thoroughly. When the i18n_locale_text_match column attribute is set, the behavior is applied to all queries including ACLs, business rules, and so forth.
Setting the column attribute i18n_locale_text_match
- With the admin role, navigate to sys_dictionary.list.
- Search for the name of your table and the name of the column to which you want to add this attribute.
- Open the dictionary entry, and confirm the column's Type. This attribute can be added to String, Translated Text, or Translated Field types.
- In the Attributes field of the column, add i18n_locale_text_match=true. Use a comma separator without spaces. (You might need to switch to the Advanced view of the record to see the Attributes field).
- As an alternative to the previous step, open the Attributes tab in Related Links, then select New. In the Attributes field search for locale text match, then set the Value field to True.
- Select Update or Submit.
Other methods for locale text match
- GlideRecord: setLocaleTextMatch (Boolean isLocaleTextMatch)
- Where: Used in scripts, such as for background transactions.
- Use case: Temporarily activate or deactivate locale text match (case and accent sensitivity) for a specific GlideRecord query
- URL parameter: sysparm_locale_txt_match
- Where:
- Add
sysparm_locale_txt_match=trueorsysparm_locale_txt_match=falseas an extra parameter in a URL. - Table API. For information see Explore the REST API for a table.
- Add
- Use case: When the parameter is added, activate or deactivate locale text match (case and accent sensitivity) for queries that display data in platform lists.
- Where:
- Global property: com.glide.db.ui_i18n_locale_text_match
- Where: Create a property in sys_properties, if it doesn't exist already.
Name: com.glide.db.ui_i18n_locale_text_match.
Type: true | false.
Value: either true or false according to your business requirements. For text searches in tables in the product UI, both this property and the column attribute should be set to true.
- Default: false
- Use case: Activate or deactivate locale text match (case and accent sensitivity) for queries that display data in the platform lists.
- Where: Create a property in sys_properties, if it doesn't exist already.
- URL parameter: sysparm_locale_txt_match (highest priority).
- Global property: com.glide.db.ui_i18n_locale_text_match (lowest priority).