问题:我的公司正在使用 Liferay 6.0,它正在升级到 Liferay 6.1 GA2。在 6.0 中,我们在 SQL Server 数据库列中有大量行具有智能引号字符。在自动升级中,智能引号被替换为“?”。我们计划在升级之前对内容运行查找和替换 SQL 语句,以防止出现此问题。我编写了一个小型 Java 程序来查找字符的 ASCII 值。该字符在 ANSI(“A‎A”)中的显示与在 UTF-8(“AA”)中的显示不同。我在前面的句子中将智能引号字符夹在大写字母 A 之间。
public class CheckAscii {
public static void main(String args[]) {
asciiVals("A‎A"); //ANSI
asciiVals("AA"); //UTF-8
}
static void asciiVals(String str) {
System.out.println("Length of the string: " + str + " is " + str.length());
for (int j=0; j<str.length(); j++){
System.out.println("Ascii value of char " + str.charAt(j) + " : " + (int)str.charAt(j));
}
System.out.println("");
}
}
输出是
字符串长度:A‎A 为 5
char A 的 Ascii 值:65 char 的 Ascii 值€
:226
char € 的 Ascii 值:8364
char Ž 的 Ascii 值:381
char A 的 Ascii 值:65
字符串的长度: AA 是 3
char A 的 Ascii 值:65 char 的
Ascii 值:8206
char A 的 Ascii 值:65
以下查询没有给我任何行,
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(226)+']%'
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(8364)+']%'
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(381)+']%'
SELECT [COLUMN] FROM [TABLE] where [COLUMN] like '%['+char(8206)+']%'
此查询获取,
select CHAR(226), CHAR(8364), CHAR(381), CHAR(8206)
â null null null
我不知道如何在文本中查找这些字符。有谁知道如何在 SQL Server 中为智能引号形成搜索查询?