Может ли индекс SQL различать `Doe, John` (1 пробел) и `Doe, John` (2 пробела)?

#sql

#sql

Вопрос:

В people базе данных есть таблица с author_names , на которую ссылаются из нескольких других баз данных. Имена авторов должны быть уникальными.

Не спрашивайте меня, как, но кому-то удалось создать разные записи author_names для почти идентичных терминов. Например, есть Doe, John (один пробел), на который указывают некоторые записи x, y, z, и другая запись для Doe, John (два пробела), на которую указывают разные записи p, q, r.

Мы хотим очистить. Теперь мы можем использовать эквиваленты. То есть, если бы у нас был автор Doe, Johannes , который является одним и тем же человеком als Doe, John , мы можем сделать их эквивалентами, и все будет в порядке. (Т.е. Если вы ищете автора Doe, John, вы также получаете хиты на Doe, Johannes и наоборот.)

Проблема в том, что SQL видит Doe, John и Doe, John как идентичные термины. И поэтому отказывается делать их эквивалентными, потому что это нарушает требование уникальности.

Как можно обойти это (кроме ручной очистки, запись за записью)?

(Я проверил dba.stackexchange, но здесь гораздо больше о SQL.)

Комментарии:

1. Для начала вам не следует хранить имя и фамилию в одном столбце. Но yes 'a b' считается отличным от 'a b'

2. В каких ситуациях вы обнаруживаете, что «SQL видит Doe, John and Doe, John как идентичные термины»? Можете ли вы не обновлять записи, которые в настоящее время указывают на Doe, John (два пробела), чтобы вместо этого указывать на Doe, John (один пробел)? а затем удалить Doe, John (два пробела)?

3. @a_horse_with_no_name Не могли бы вы указать, какой параметр на сервере MSSQL включает или выключает различие?

4. Для этого нет настройки. Вот как это работает «из коробки» dbfiddle.uk /…

5. @user9601310 Да, мы могли бы, но это большая ручная работа. Я ищу более разумный способ.