Groovy поддержка Unicode для выбора MySQL - PullRequest
0 голосов
/ 19 августа 2011

Я пытаюсь исправить проблему в базе данных в кодировке UTF-8.При переходе на текущую систему баз данных похоже, что данные были сжаты в кодировку Latin-1.Я написал быстрый скрипт Groovy, чтобы найти и сообщить об ошибках кодирования.Но это не соответствует ничему.

Если я напишу аналогичный код на Java, отчет будет работать нормально!

Итак, я предполагаю, что новичок в Groovy делает глупость.Кто-нибудь может увидеть ошибку в моем подходе?Я пытался жестко закодировать символы в операторе select, но я не могу заставить работать какие-либо специальные символы.

Заранее спасибо, конечно.

aH

Groovy Code

import groovy.sql.Sql

        def dias = ["è": "é", "…": "…"]

        def atk = Sql.newInstance(
            'jdbc:mysql://myURL:3306/myDB?useUnicode=true&characterEncoding=utf8',
            'user',
            'pass',
            'com.mysql.jdbc.Driver'
        )

        dias.each() {x ->
            println x.getKey()
            atk.eachRow("SELECT `noteContent` FROM `ArchDescriptionRepeatingData`"
            + "WHERE `noteContent` LIKE(\"%" + x.getKey() + "%\")"
            ) { y ->
                println y
            }
        }

, как и было запрошено, здесь указан код Java, в который я добавил некоторые дополнительные функции:

import java.sql.*;
import java.util.*;
import java.util.regex.*;

    public class Diacritic {
        private Connection connection;
        private HashMap<String, String> dia;

        Diacritic() throws SQLException, ClassNotFoundException {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(
                "jdbc:mysql://myURL:3306/myDB"
                + "?user=user&password=pass");
            dia = new HashMap<String, String>();

            populateArray();

            System.out.println("Component Titles");

            for(Map.Entry e : dia.entrySet()) {
                String st = e.getKey().toString();
                Pattern p = Pattern.compile(st);
                System.out.println();
                System.out.println(st + "\t\t->\t" + e.getValue().toString());
                System.out.println();
                Statement s = connection.createStatement();
                ResultSet r = s.executeQuery("SELECT `itemValue` FROM `ListOrderedItems`"
                    + "WHERE `itemValue` LIKE(\"%" + st + "%\")"
                    //+ "LIMIT 0, 100000"
                );

                int x = 0;

                while (r.next()) {
                    x++;
                    Matcher m = p.matcher(r.getString(1));
                    if(m.find()) {

                    int start = 0;
                    int mstart = m.start();
                    int mend = m.end();
                    int end = r.getString(1).length();
                    if (mstart - start <= 10 || end - mend <= 10) {
                        System.out.println(x + ": " + r.getString(1)
                            + "\t->\t"
                            + "\t"  + r.getString(1).substring(0,mstart)
                            + e.getValue().toString()
                            + r.getString(1).substring(mend)
                            );

                    }
                    else {
                        System.out.println(x + ": " + r.getString(1).substring((mstart - 10), (mend + 10))
                            + "\t->\t"
                            + "\t"  + r.getString(1).substring((mstart - 10),mstart)
                            + e.getValue().toString()
                            + r.getString(1).substring(mend, (mend + 10))
                        );
                    }

                    }
                }

                s.close();
            }


        }

        public static void main (String[] args) throws SQLException, ClassNotFoundException {
            Diacritic d = new Diacritic();
        }

        public void populateArray() {
            dia.put("è", "é");
            dia.put("…", "…");
            dia.put("—", "");
            dia.put("‑”", "-");
            dia.put("é", "é");
            dia.put("æ", "æ");
            dia.put("ë", "ë");
            //etc...
        }   
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...