-- ----------------------------
CREATE TABLE `news` (
`id` int(4) NOT NULL auto_increment,
`timestamp` datetime NOT NULL,
`posted` text NOT NULL,
`captionRus` text NOT NULL,
`messageRus` text NOT NULL,
`captionEng` text NOT NULL,
`messageEng` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `news` VALUES ('13', '2008-03-03 14:43:20', 'kos', 'тест', 'тестовое сообщение', 'asd', 'dsa');
INSERT INTO `news` VALUES ('19', '2008-04-20 13:12:16', 'Kosmos', '????? ????', '???????? ?????? ?????', 'test', 'test news');
Как конвертировать текст из одной кодировки в другую?
Прога для работы с бд.
При добавлении записей в таблицу через нее, все русские буквы превращаются в ???? и так же хранятся в самой таблице. Если же в ручную в таблицу написать по русски, то все нормально и сохраняется и отображается.
Пришел к выводу, что нужно посылать текст в бд в формате юникода. Собственно в этом и вопрос. Есть у меня jTextArea и jTextField. Как сконвертировать текст введенный в них в юникод?
http://skipy.ru/technics/encodings.html - можно почитать еще, довольно интересно написано про кодировки.
Опиши подробней свои настройки.Сама БД в UTF8?
Если хочешь вручную управлять кодировками - используй конструктор класса String, который принимает вторым параметром кодировку символов, когда будешь получать содержимое компонента через getText().
Еще можно использовать декодеры/энкодеры из пакета java.nio.charset.*.
Но, это все оверкилы. По идее, все должно работать без этих ухищрений.
Еще, вдогонку. Самое главное - как идет соединение с БД? Используется чистый JDBC, JPA, Hibernate, еще что-то? Параметры всего это - в студию!
Код:
Это дамп таблицы с записями.
Первый инсерт - я в навикате добавил эту запись: результат - в базе хранится все в русских буквах и в проге отображается русскими буквами
второй инсерт - сделан через прогу. В базе соответственно хранится в ??? и в проге отображается так же.
К базе коннектюсь с помощью mysql-connector-java-5.0.7-bin.jar. Это jdbc вроде...
Код:
Connection conn;
/*jdbc:mysql://127.0.0.1/db_name?user=root&password=test_pass*/
String conn_prop = "jdbc:mysql://" + strings.get(0) + "/" + strings.get(1) + "?" + "user=" + strings.get(2) + "&password=" + strings.get(3);
conn = DriverManager.getConnection(conn_prop);
/*jdbc:mysql://127.0.0.1/db_name?user=root&password=test_pass*/
String conn_prop = "jdbc:mysql://" + strings.get(0) + "/" + strings.get(1) + "?" + "user=" + strings.get(2) + "&password=" + strings.get(3);
conn = DriverManager.getConnection(conn_prop);
М... вроде ничего интересного не упустил.
Цитата: Lei fang
Это jdbc вроде...
М... вроде ничего интересного не упустил.
Код:
Connection conn;
/*jdbc:mysql://127.0.0.1/db_name?user=root&password=test_pass*/
String conn_prop = "jdbc:mysql://" + strings.get(0) + "/" + strings.get(1) + "?" + "user=" + strings.get(2) + "&password=" + strings.get(3);
conn = DriverManager.getConnection(conn_prop);
/*jdbc:mysql://127.0.0.1/db_name?user=root&password=test_pass*/
String conn_prop = "jdbc:mysql://" + strings.get(0) + "/" + strings.get(1) + "?" + "user=" + strings.get(2) + "&password=" + strings.get(3);
conn = DriverManager.getConnection(conn_prop);
М... вроде ничего интересного не упустил.
Конечно, JDBC. Строго говоря, любое соединение к БД в Java в конечном итоге идет через него, но поверх него может использоваться еще куча разных средств.
У меня есть подозрение, что проблема у тебя именно в настройке БД.
Для начала попробуй использовать следующие параметры (дополнительные) подключения - jdbc:mysql://host:port/dbname?[color=red]useUnicode=true&characterEncoding=utf8[/color]
Код:
String conn_prop = "jdbc:mysql://" + strings.get(0) + "/" + strings.get(1) + "?useUnicode=true&characterEncoding=utf8&" + "user=" + strings.get(2) + "&password=" + strings.get(3);
Вот так все работает как надо : )