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

  • Автор темы Автор темы riff
  • Дата начала Дата начала

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

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

Эм... тебе не кажется, что не только в регистре разница?
 
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.
 
riff
А как ты тестируешь в окружении, которое отличается от боевого?
 
Автор оригинала: Angerslave
А как ты тестируешь в окружении, которое отличается от боевого?
Может я не понял ваш вопрос. но чтобы писать не обязательно быть на боевом сервере. На локальном теже апач, mysql, php, +редактор и дебуггер...
В чём вопрос?
 
riff
Не обязательно на боевом, но воспроизвести такую же конфигурацию-то надо.

-~{}~ 16.01.09 13:39:

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

-~{}~ 16.01.09 11:12:

Автор оригинала: *****
а где в кодировке 1251 символ евро?
Ну я не знаю... Наберите в неуникодовой(в прочем как и в уникодовой) программе Alt+0128. В XP И висте он отображается. И из mysql выбирается.
 
[SQL]show variables like "character%" ; show variables like "collation%";[/SQL]
Так можно посмотреть всё, что касается кодировок. Ну и соответственно изменения после выполения одной и другой команды. В моей практике, как на вин так и на юникс системах всегда было достаточно SET NAMES. Так что ситуация очень даже странная. SET NAMES после SET CHARSET это всё равно, что SET NAMES без SET CHARSET.
 
Автор оригинала: Mols
[SQL]show variables like "collation%";[/SQL]
Ввёл этот запрос - увидел что charset базы забыл сменить на utf8. Сменил.
В программе закомментировал "set charset cp1251", оставив только "names" - теперь insert русских букв стал проходить нормально.
 
Сверху