您也可以在我的 YouTube 频道 上观看此内容 。
什么是象形文字?
同源字符是看起来像另一个字符的字符。 l(小写字母“ L”)和1(数字)被视为单字形。 O(字母)和0(数字)也是如此。
同形异义字可以存在于字符集中(例如上述拉丁字符集示例),也可以存在于字符集之间 。 例如,您可能有Unicode撇号ʼ,它是拉丁单引号字符'
的同形符号。
SQL Server如何处理Unicode象形文字?
你应该问有趣。 如果将Unicode字符传递给非Unicode数据类型(如char),则SQL会将Unicode字符隐式转换为与其最相似的非Unicode象形文字。
为了了解这一点,我们可以使用上例中的Unicode撇号:
SELECT
CAST(N'ʼ' AS nchar) AS UnicodeChar,
CAST(N'ʼ' AS char) AS NonUnicodeChar
您可以在第二列中看到SQL自动将撇号转换为单引号:
From: https://hackernoon.com/ʼ-śℇℒℇℂʈ-how-unicode-homoglyphs-will-break-your-custom-sql-injection-sanitizing-functions-1224377f7b51