SET NAMES utf8;
SET CHARACTER SET utf8;
SET SESSION collation_connection = 'utf8_general_ci';
MySQL и кодировка. Опять ваш сраный UTF.
Предыстория: Решил из своего Asus eeePC 900 сделать серверок, т.к. на большее он уже не годится. Поставил FreeBSD, Апач, PHP, расширения для PHP...
Но сложнее всего дался MySQL... не знаю почему...
Собственно вопрос в следующем:
Таблицы в win1251 выглядят прекрасно и проблем не вызывают...
Пока мы не переходим к UTF-8... пришлось побороться, чтобы заставить ИСКАТЬ по Мускулю в UTF-8... И проблема с выводом... что делать?
Если в my.cnf ставить по умолчанию коннекта к базе default_character_set, character-set-server=cp1251; init-connect="SET NAMES cp1251" то при работе с вин1251 всё супер... с УТФ лажа... если наоборот - то с утф всё хорошо, а с 1251 - местами лажа (при выборке с БД возвращает ?????????)...
В общем, подскажите, у кого как сервер настроен, чтобы с кодироваками всё было гуд? Ну и в ПхпМайАдмине всё было красиво (UTF-8 у меня строго кракозяблами идет, в любых вариантах).
P.S. Это я всё пытаюсь по вашим рекоммендациям, друзья, перейти с устаревшего вин1251 к УТФ
Код:
После подключения три этих запросе решают все проблемы с кодировками. Не надо привязываться к настройкам MySql сервера. Устанете настраивать при переносах.
Тем более проще, заодно, всю базу сразу сконвертировать из 1251 в утф8.
Цитата: mike
Код:
SET NAMES utf8;
SET CHARACTER SET utf8;
SET SESSION collation_connection = 'utf8_general_ci';
SET CHARACTER SET utf8;
SET SESSION collation_connection = 'utf8_general_ci';
После подключения три этих запросе решают все проблемы с кодировками. Не надо привязываться к настройкам MySql сервера. Устанете настраивать при переносах.
Т.е. непосредственно в PHP-коде после mysql_connect отправить соответствующие запросы к базе?
Цитата: UAS
Тем более проще, заодно, всю базу сразу сконвертировать из 1251 в утф8.
Хорошо, как осуществлять поиск в БД?
При всех раскладах, если я в php-файле задаю $city="Город", всё равно он в базе ничего не находит. Хотя файл сохранен в UTF.
Ну по идее, если SET NAMES и прочие некорректно установлены - то и ничего не найдет, т.к. кодировки того что ищут и где - не совпадают. У меня прекрасно поиск всегда работает на UTF.
Как заставить красиво искать?
1. Исходный текст (в PHP коде)
2. Соединение, SET NAMES ...
3. БАЗА, сравнение таблиц...
Как сделать так, чтобы всё корректно работало при вариациях кодировки? Допустим, файл ANSI (win1251), SET NAMES= UFT-8, таблица UTF-8... Нам нужно чтобы кодировки совпали в соединении и таблице? Или в передаваемых данных и соединении? или во всех трёх местах?
1) Если данные отправляются к SQL-серверу, то он воспринимает их в кодировке k.
2) Если данные принимаются от SQL-сервера, то он их отправляет в кодировке k, независимо от кодировки данных в хранящей их таблице..
У вас должно быть ВСЁ в utf-8. Файл с кодом тоже должен быть сохранён в этой кодировке, это обязательно. Далее должны быть в этой кодировке файлы-скрипты базы данных (если вы импортируете скрипт в phpMyAdmin). И, наконец, в этом самом скрипте для каждого текстового поля должно быть указано
Код:
character set utf8
а после таблицы:
Код:
character set=utf8 collate=utf8_general_ci
Тогда на 100% всё заработает как надо. У вас поиск не работает потому что одно из условий не выполняется.
Топикстартеру уже ответили задолго до вашего появления
спасибо и мне помогло