我希望能够使用LINQ to Entities在我的sql server中保存的字符串中识别有问题的字符。
有问题的字符是编码过程中出现问题的字符。
这是一个有问题的字符串示例:“testing stringáאç”。
在上面的例子中,只有 字符被认为是有问题的。
因此,例如,以下字符串不被视为有问题:“testingstringáאç”。 如何查看此Varchar并确定其中存在有问题的字符?
请注意,我首选的解决方案是通过LINQ to实体查询来识别它,但也欢迎其他解决方案 - 例如:某些商店程序可能?
我尝试使用正则表达式和“LIKE”声明,但没有成功......
答案 0 :(得分:2)
它有DecoderFallback Property和EncoderFallback Property,可让您检测并替换解码过程中发现的错误字符。
答案 1 :(得分:1)
您可以这样做:
DECLARE @StringWithProblem NVARCHAR(20) = N'This is '+NCHAR(8)+N'roblematic';
DECLARE @ProblemChars NVARCHAR(4000) = N'%['+NCHAR(0)+NCHAR(1)+NCHAR(8)+']%'; --list all problematic characters here, wrapped in %[]%
SELECT PATINDEX(@ProblemChars, @StringWithProblem), @StringWithProblem;
它为您提供第一个有问题的字符的索引,如果没有找到则为0。
答案 2 :(得分:1)
.Net和NVARCHAR都使用Unicode,因此没有任何内在的“问题”(至少不是BMP字符)。
因此,您首先必须定义“有问题”的含义:
只需在编码之间进行转换并检查数据是否丢失:
CONVERT(NVARCHAR, CONVERT(VARCHAR, @originalNVarchar)) = @originalNVarchar
请注意,您可以使用COLLATE子句而不是使用默认数据库排序规则来使用SQL Server排序规则。
这在.Net
中无法轻易完成