Я занимаюсь разработкой приложения для подключения к базе данных на Java. У клиента есть SQL Server, и я попробовал версию SQLExpress от Microsoft, если мы не хотим покупать лицензию на время разработки. К сожалению, SQL Server Express не разрешает доступ к сети, поэтому мы не можем работать по сети с одной и той же базой данных, и нам приходится устанавливать сервер SQL Server Express на каждом клиенте разработчика.
Сегодня утром я решил переключиться на MySQL в процессе разработки. Я создал базу данных MySQL с кодировкой UTF8 и экспортировал данные в файлы CSV, которые я также преобразовал в UTF8 и импортировал их.
Я подключаюсь к Java с драйвером JDBC и теперь во время выполнения получаю странное поведение. Результаты полностью отличаются от клиента, подключающегося к SQL Server. Я написал SQL-код для склеивания myselft и не использую такую среду, как Hibernate или JPA.
Я полагаю, что проблема связана с кодировкой символов. Файлы исходного кода - не бейте меня - закодированы с помощью CP1252, потому что я только начал разрабатывать в Eclipse для Windows и доверял настройкам по умолчанию. Я запрашиваю базу данных, получая объект ResultSet, а затем считываю данные с помощью методов получения, предоставленных ResultSet. Я не делаю преобразования символов во время выборки данных.
Проблема теперь в том, что я получаю не зашифрованный, не хорошо закодированный вывод, а вместо этого NullPointerExceptions и странную обработку данных. Например: я написал метод, который сравнивает задания (объект, представляющий задание с именем, идентификатором, грузом и всем этим). Результаты во время выполнения отличаются. Некоторые задания равны на SQL Server, а некоторые на MySQL, но результат SQL Server правильный.
Я только что просмотрел свойства базы данных и увидел, что кодировка символов SQL Server соответствует ISO-Latin-1.
Спасибо за вашу помощь и пожелания из Кельна,
Marco