Символ евро в Insert

riff

Новичок
Символ евро в Insert

В двух словах:
* База в UTF-8;
* $db = new mysqli(...);
* $db->query('SET CHARSET UTF8');
* $sql = "INSERT INTO `table` VALUES ('Text ?')";
* $db->query($sql);
Вместо еврика вставляется "?". подскажите что делать?
(в дебуггере видно что в переменной $sql правильный символ, а теряется он именно в $db->query).
хе. вот здесь же, в сообщении, он вставился :)

-~{}~ 12.01.09 21:08:

Отвечаю сам себе:
помимо
* $db->query('SET CHARSET UTF8');
надо добавить
* $db->query('SET NAMES UTF8');
 

riff

Новичок
Автор оригинала: *****
не помимо, а вместо
Сейчас проверял: на люниковской mysql "вместо", а на виндусовской "помимо".
Возможно из-за старой win версии (5.0.41).
Но если я не сделаю "set charset cp1251", а лишь NAMES то, соединившись из программы с win весией MySql, запрос "insert into... 'текст'" вставляет "?", а соединившись из той же программы с unix версией и выполнив этот же запрс - всё нормально.

Зато с одним лишь"set names cp1251", в win версии, select возвращает нормальные символы.
 

nerezus

Вселенский отказник
riff
set names cp1251
SET NAMES UTF8

Эм... тебе не кажется, что не только в регистре разница?
 

riff

Новичок
nezerus

База в utf8, сайт в utf8, из программы я с некоторыми таблицами работаю(select, insert, update) в кодировке 1251.

На сайте: (и на реальном и на локальном)
* "+charset -names" работает в utf8, но не вставляется ?.
* "-charset +names" кажется всё работает.
В программе: "+charset -names" работает в cp1251, но без ?.
В программе (коннектясь к *unix'овской mysql): "-charset +names" всё работает в cp1251.
В программе (коннектясь к *wind'овской mysql): "+charset +names" всё работает в cp1251.

* локальный, он же windows'овский - это где пишу и тестирую.
* реальный, он же *unix'овский - это рабочий.

-~{}~ 16.01.09 09:01:

повторюсь. возможно надо обновить win mysql.
 

Angerslave

Новичок
riff
А как ты тестируешь в окружении, которое отличается от боевого?
 

riff

Новичок
Автор оригинала: Angerslave
А как ты тестируешь в окружении, которое отличается от боевого?
Может я не понял ваш вопрос. но чтобы писать не обязательно быть на боевом сервере. На локальном теже апач, mysql, php, +редактор и дебуггер...
В чём вопрос?
 

Angerslave

Новичок
riff
Не обязательно на боевом, но воспроизвести такую же конфигурацию-то надо.

-~{}~ 16.01.09 13:39:

Вопрос в ценности такого тестирования.
 

riff

Новичок
Автор оригинала: Angerslave
Не обязательно на боевом, но воспроизвести такую же конфигурацию-то надо.
Вопрос в ценности такого тестирования.
А понял. У нас на сервере сейчас переезд и мне пока проще что-то дописывать на локальном.

-~{}~ 16.01.09 11:12:

Автор оригинала: *****
а где в кодировке 1251 символ евро?
Ну я не знаю... Наберите в неуникодовой(в прочем как и в уникодовой) программе Alt+0128. В XP И висте он отображается. И из mysql выбирается.
 

Mols

Новичок
[SQL]show variables like "character%" ; show variables like "collation%";[/SQL]
Так можно посмотреть всё, что касается кодировок. Ну и соответственно изменения после выполения одной и другой команды. В моей практике, как на вин так и на юникс системах всегда было достаточно SET NAMES. Так что ситуация очень даже странная. SET NAMES после SET CHARSET это всё равно, что SET NAMES без SET CHARSET.
 

riff

Новичок
Автор оригинала: Mols
[SQL]show variables like "collation%";[/SQL]
Ввёл этот запрос - увидел что charset базы забыл сменить на utf8. Сменил.
В программе закомментировал "set charset cp1251", оставив только "names" - теперь insert русских букв стал проходить нормально.
 
Сверху