Задача: Моя компания использует Liferay 6.0, которая обновляется до Liferay 6.1 GA2. В 6.0 мы имеем большое количество строк в столбце базы данных SQL-сервера, которые имеют символы умной цитаты. При автоматическом обновлении смарт-кавычки заменяются на «?». Перед обновлением планировалось запустить поиск и заменить SQL-запрос для содержимого, чтобы предотвратить эту проблему. Я написал небольшую программу Java, чтобы найти значения ASCII символа. Символ выглядит по-разному в ANSI («Aâ € ŽA»), чем в UTF-8 («A A»). Я закрепил умный символ цитаты между капиталом A в предыдущем предложении.Удаление смарт-котировок из текстового столбца SQL-сервера
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("");
}
}
Выход был
Длина строки: Aa € ZA 5
Ascii значение полукокса A: 65
Ascii значение полукокса A: 226
Ascii значения полукокса €: 8364
Ascii значение полукокса Z: 381
Ascii значение полукокса A: 65
Длина строки: А А составляет 3
Ascii значение полукокса A: 65
Ascii значение полукокса: 8206
Ascii значение полукокса A: 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
Я не как искать тех, кто тя racters в тексте. Кто-нибудь знает, как сформировать поисковый запрос для интеллектуальных котировок в SQL Server?