Есть ли способ обнаружить символы Unicode в столбце nvarchar

Столбец ввода не был реализован достаточно хорошо, чтобы ограничить символы электронной почты римскими буквами ... поэтому французские и испанские символы с диакритическими знаками попали в базу данных, но отклоняются удаленными почтовыми серверами. Есть ли простой SQL-тест?

Я пытался

where email <> try_cast(try_cast(email as varchar) as nvarchar)

Хотя в какой-то мере это, кажется, сработало, оно также кажется немного агрессивным, поскольку нашло больше совпадений, чем нет.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
54
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете попробовать это:

where email like '%[^a-zA-Z0-9.@-_]%'

Это также будет учитывать обратные кавычки, пробелы, табуляции, символы новой строки, любые управляющие символы, а также! "# $% & '/:; <=>? {|} ~ как Unicode.

brianary 29.10.2018 19:25

Вы не устанавливаете размер для varchar или nvarchar, поэтому он использует длину по умолчанию, которая, я думаю, 30. Получить адрес электронной почты более 30 символов несложно. Измените на try_cast (try_cast (email as varchar (300)) as nvarchar (300)) или что-то в этом роде.

Однако вы понимаете, что символы с диакритическими знаками, китайские, японские, арабские, хинди и другие символы теперь являются действительными адресами электронной почты? Не все серверы были обновлены для их обработки, правда, но это не значит, что это не настоящий адрес.

это полезно знать, но пока это проблема.

Richard 12.03.2018 11:44

Вы можете попробовать

where email collate SQL_Latin1_General_CP437_BIN
    <> cast(email as varchar(max)) collate SQL_Latin1_General_CP437_BIN

(Вы можете изменить varchar(max) на любую длину email, хотя он также будет работать как varchar(max).)

Если вы не используете принудительную двоичную сортировку, безопасную для Unicode, тогда она может использовать любую сортировку базы данных, которая может не работать для nchar(0x2014) (- U + 2014 EM DASH, который может быть преобразован в char(0x97) с помощью SQL_Latin1_General_CP1_CI_AS), как один из примеров .

Другие вопросы по теме