2013-08-19 1 views
0

Задача: Моя компания использует 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("A‎A"); //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?

ответ

0

Если тип данных в действительности текста, сначала привести столбец VARCHAR (MAX), как это:

SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(226)+']%' 
SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(8364)+']%' 
SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(381)+']%' 
SELECT [COLUMN] FROM [TABLE] where CAST([COLUMN] AS VARCHAR(MAX)) like '%['+char(8206)+']%'