mysql + utf

Fórumok

mysql + utf

Hozzászólások

Hali!

Tudnatok segiteni abban, hogyan tudnek mysql-bol kiolvasni egy erteket, es betenni ugy egy valtozoba, hogy ne ascii, hanem unicode formatumu legyen?
:roll:

Ha nyomsz egy SET NAMES utf8;-at, akkor a sessionodra ervenyes character_set_connection es character_set_results utf8 lesz. A queryd resultjait pedigy nyilvan ennek megfeleloen kezeled.

Koszi szepen, sikerult.

Meg az lenne a kerdesem, hogy ha
sprintf(query,SELECT * FROM users WHERE nick='%s',utfnick);
es a query-t elküldöm, akkor is utf kodolással keresi?
mert egy ő betus nevre keresek ra, de nem ad vissza result-ot


mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE `petikehc` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
Query OK, 1 row affected (0.00 sec)

mysql> USE `petikehc`;
Database changed
mysql> SHOW CREATE DATABASE `petikehc`;
+----------+-------------------------------------...
| Database | Create Database
+----------+--------------------------------------...
| petikehc | CREATE DATABASE `petikehc` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */
+----------+--------------------------------------...
1 row in set (0.00 sec)

mysql> SHOW VARIABLES like "character_set_%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> CREATE TABLE `users` (`login` CHAR(64));
Query OK, 0 rows affected (0.02 sec)

mysql> SHOW CREATE TABLE `users`;
+-------+---------------------------------------...
| Table | Create Table
+-------+--------------------------------------...
| users | CREATE TABLE `users` (
  `login` char(64) collate utf8_bin default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-------+--------------------------------------...
1 row in set (0.00 sec)
[/code:1:82b66afaa0]

... itt gnome alatt mysql query browserben inserteltem egy rekordot...

[code:1:82b66afaa0]
mysql> SELECT u.`login` FROM `users` u WHERE u.`login` RLIKE "ő";
+---------------------------------+
| login                           |
+---------------------------------+
| Árvíztűrő tükörfúrógép |
+---------------------------------+
1 row in set (0.00 sec)

(hm.. mukodik az rlike utf8 mellett? 4.1.11-1 (sarge))

Hali.

Ezzel se talalja meg sql - ben.
Valojaban az a gondom, hogy egy kliens (java, utf kodolassal) elkuldi
a nevet, es a servernek ( C ) azt ellenoriznie kellene sql adatbazisban.
Ha a nicket atkonvertalom utf - rol ascii-ra akkor ugye ő es ű betuket
nem jol kezeli. :roll: :roll:

U.i.: phpmyadminba kiprobaltam amit irtal es ott jol megtalalta az ő betuset.

hm..most kiirattam fajlba az
sprintf(query,SELECT * FROM users WHERE nick='%s',utfnick);
altal letrehozott query - t, es ennyi volt a fajlba..
SELECT * FROM users WHERE nick=''
Vagy ez lehet azert mert fajlba nem tud normalisan utf stringet irni?
utfnick erteke biztos nem "" mert kesobb hasznalom es ott jo.. :roll:

Én a helyedben írnék saját sprintf-et. Én azt csináltam, hogy definiáltam egy %q-t, ami querybiztosan helyettesíti be a stringeket (mysql_real_escape_string-el): myvsprintf(query,SELECT * FROM users WHERE nick='%q',utfnick);

Egyébként meg biztos vagy benne, hogy amit kapsz stringet, az utf8? Szerintem tipikusan itt a hiba, javaslom az iconv-ot.
A query filebamentésekor biztos, hogy nem veszik el. Sokkal valószínűbb, hogy már a query-be se rakja bele (bár nem tudom, ez hogy miért is). Tipp: mentsd le külön az utfnick-et egy fileba, nézd meg hexadump-al. Ha az "ő" helyén két kriksz-krakszot látsz, akkor fáintos.

Sziasztok!
A SET NAMES utf8;
parancsot minden mysql-be lépéskor meg kell ismételnem?
Van esetleg tapasztalatotok a knoda 0.8.3 nevű programban hogyan tudom elérni hogy az utf-8 at szépen mutassa? Nagyon rossz ez az egyiptomi jelzésrendszer… :)
Ubuntu 8.04.
Előre is köszönöm, ha megosztjátok velem esetleges ötleteiteket!
Valek