Переключение Java с MS SQL на MySQL - Наборы символов - PullRequest
1 голос
/ 18 февраля 2010

Я занимаюсь разработкой приложения для подключения к базе данных на 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

1 Ответ

0 голосов
/ 18 февраля 2010

Я мало знаю о MS SQL, но если данные MS SQL закодированы латинскими буквами, их импорт в базу данных UTF-8 на стороне mySQL должен завершиться с ошибкой и привести к повреждению данных.

Я бы сначала попытался исправить данные. Можете ли вы повторить процесс без преобразования файла дампа и базы данных latin1 в mySQL?

Плюс, похоже, заметные различия в типах данных между mySQL и MS SQL:

Будьте внимательны при планировании: вы хотите сопоставлять типы данных по емкости, а не по имени. Например: MySQL VARCHAR может содержать до 255 символов, тогда как SQL Server VARCHAR может содержать до 4000 символов. В этом случае вам нужно будет использовать тип столбца MySQL TEXT вместо VARCHAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...