[mysql]problem z kodowaniem przy ut8

0

Witam
Zmagam sie juz sporo chwile z poprawna konfiguracja mysql zwiazana z kodowania utf8.
O ile ustawienie tego kodowania nie jest problemem o tyle praca na nim nie jest juz taka przyjemna;/
Moja obecna konfiguracja:
mysql> status

mysql Ver 14.12 Distrib 5.0.51a, for Win32 (ia32)
Current user: root@localhost
Server version: 5.0.51a-community-nt MySQL Community Edition (GPL)
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8

mysql> show variables LIKE 'char%';
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+

dodalam rowniez w my.ini
default-character-set=utf8

Po utworzeniu testowej tabeli

mysql> show create table test;
+-------+-----------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                  |
+-------+-----------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `name` varchar(222) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

probuje dodac do niej nowy rekord:

mysql> insert into test value('ść');
ERROR 1366 (HY000): Incorrect string value: '\x98\x86' for column 'name' at row 1

Jak rozwiazac ten problem bo ja juz nie mam pomyslu;/
Pozdrawiam;*

0

http://4programmers.net/Forum/viewtopic.php?id=108677

Ale to tylko jezeli korzystasz z konsoli? No bo z zew. aplikacji (np. pisanej w PHP) dziala, prawda?

Przykladowo, piszac w PHP sprobuj przed wlasciwymi zapytaniami:

@mysql_query('SET NAMES utf8');

0

Dzieki za odpowiedz ;)
Problem taki pojawia sie u mnie pod konsola bez roznicy czy wymuszam names utf8 czy nie.

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test value('ść');
ERROR 1366 (HY000): Incorrect string value: '\x98\x86' for column 'name' at row 1
mysql> SET CHARACTER SET utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test value('ść');
ERROR 1366 (HY000): Incorrect string value: '\x98\x86' for column 'name' at row 1

Do bazy lacze sie takze przy uzyciu komponentu C++ Builder'a dbExpress,a
dane wyswietlana sa w DBGrid'zie .
Bez problemu moge umiescic nowy rekord w bazie i go odczytac uzyskujac zamierzony efekt
czyli : "ść"
Problem pojawia sie wlasnie jezeli wymusze kodowanie utf8 dla polaczenia

            SQLCon->Open();
            SQLDataSet1->CommandType = ctQuery;
	SQLDataSet1->CommandText = "set names utf8";
	SQLDataSet1->ExecSQL();
	SQLDataSet1->CommandText = "SET CHARACTER SET utf8";
	SQLDataSet1->ExecSQL();

Przy takim ustawieniu proba umieszczenia danych zawierajacych polskie znaki konczy sie wyjatkiem:
[...]Incorrect string value: '\x98\x86' for column 'name' at row 1
Dzieje sie tak zapewne dlatego ze domyslne polaczenie odbywa sie z ustawionym kodowaniem latin1 ,a wtedy nawet z podkonsoli nie ma problemu:

mysql> set names latin1;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test value('ść');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+------+
| name |
+------+
| ??   |
| ťŠ     |
| ść     |
| ść     |
+------+
4 rows in set (0.00 sec)

Strasznie dziwna sytuacja [???]

1 użytkowników online, w tym zalogowanych: 0, gości: 1