[Megoldva] mysql_query("SET CHARACTER SET 'utf8'"); Java Servletben
Van egy adatbázis benne egy adattábla:
CREATE DATABASE siteDB DEFAULT CHARACTER SET utf8;
USE siteDB;
CREATE TABLE blog(
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
created DATETIME DEFAULT '0000-00-00 00:00:00',
modified DATETIME DEFAULT '0000-00-00 00:00:00',
title VARCHAR(255) NOT NULL,
text TEXT NOT NULL
)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Készülget hozzá egy java EE-s alkalmazás. Minden fájl utf-8-ba mentve, mint látható a fentiből
az adatbázis is és az adattábla is utf-8-ban van. (igen a két szöveges mező is).
A problémám az, hogy a Mysql-be nem utf-8-ként mentődik, hanem az ékezetes betűk helyett mindenféle krix-krax van. Fontos tehát, hogy nem az adatbázisból való kiolvasással van a gond, hanem a beírással.
Mivel korábban foglalkoztam php-vel, így kipróbáltam, íme egy példa:
<?php
$link = mysql_connect('localhost','user','pass');
if (!$link) {
die('Could not connect to MySQL: ' . mysql_error());
}
echo 'Connection OK
';
$db = mysql_select_db("siteDB");
if ($db != true){
echo "Adatbázis kiválasztás sikertelen";
die();
}
echo "ok
";
$str="INSERT INTO blog (created, modified, title, text) VALUES(now(), now(),'éáő', 'éáőpé')";
//mysql_query("SET NAME 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'"); // <- ha ez benne van, akkor oké
mysql_query($str);
mysql_close($link);
?>
A fenti példában a comment szerint ha beírom, a "mysql_query("SET CHARACTER SET 'utf8'");" sort, akkor jól mentődnek el az ékezetes karakterek, ha nem akkor a már ismertetett krix-kraxos történet jön elő.
Tehát valami mysql_query("SET CHARACTER SET 'utf8'");-hez hasonlót szeretnék javaban.
Ami megvan:
response.setContentType("text/html; charset=utf-8");
//request.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
A html oldalak így generálódnak:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Amiket kipróbáltam, de nem segítettek:
1) google szerint, amikor csatlakozom a adatbázishoz, akkor paraméterként átadható az "encoding", tehát itt:
con = DriverManager.getConnection("jdbc:mysql://localhost/siteDB?IDE_JON_AZ_ENCODING",
"user", "pass");
Már nem emlékszem mi volt az IDE_JON_AZ_ENCODING, de kipróbáltam és nem működött. :)
2)Mint php-nél próbáltam egy query-t csinálni:
String sql = "INSERT INTO blog ....";
Connection con = null;
PreparedStatement ps = null;
Statement stmt = null;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost/siteDB",
"user", "pass");
Statement st = con.createStatement();
st.executeQuery("SET NAMES 'utf8'");
st.executeQuery("SET CHARACTER SET 'utf8'");
st.executeUpdate(sql);
st.executeQuery("SET CHARACTER SET 'utf8'"); helyett próbáltam sima execute-ot -> semmi.
Továbbra is rosszul menti a karaktereket az adatbázisba.
3) my.cnf módosítása. Ez megtörtént, de sokra nem megyek vele, egyrészt mert nem javult meg ettől semmi, másrészt meg ahova majd feltölteném ott se tudom módosítani a my.cnf-et...
A kérdés tehát adott, valamiért az adattáblába rosszul mentődnek el a sorok,
A segítséget, ötletet előre is köszi!
- Tovább ([Megoldva] mysql_query("SET CHARACTER SET 'utf8'"); Java Servletben)
- 5159 megtekintés