[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться с базой данных.
demoniqus
Имею mysql 5.1 в установленном DENWER
Создаю БД в DOS-овском окне mysql_run_to_import_dumps.exe командой
create database SITRANS default character set utf8;


затем коннектюсь
connect SITRANS;


проверяю кодировку в БД

show create database SITRANS;


результат: CREATE DATABASE `sitrans` /*!40100 DEFAULT CHARACTER SET utf8 */
т.е. кодировка вроде UTF-8

далее создаю таблицу
create table TRUCKS (IND integer not null auto_increment primary key, TRUCKNUM char(12) not null, MARKA text not null) default charset=utf8;


проверяю кодировку таблицы
show create table TRUCKS;

результат: CREATE TABLE `trucks` (`ind ` int(11) NOT NULL AUTO_INCREMENT, `trucknum` char(12) NOT NULL, `marka` text NOT NULL, PRIMARY KEY (`ind`)) ENGINE=MyISAM DEFAULT CHARSET=utf8
опять имею вроде как UTF-8
теперь добавляю несколько записей командой INSERT (буквы номера - кириллица) и проверяю отображение данных
insert into TRUCKS (TRUCKNUM, MARKA) VALUES ('Ц 001 ШЩ 150', 'volvo');
insert into TRUCKS (TRUCKNUM, MARKA) VALUES ('Ц 002 ШЩ 150', 'volvo');
insert into TRUCKS (TRUCKNUM, MARKA) VALUES ('Ц 003 ШЩ 150', 'dodge');
insert into TRUCKS (TRUCKNUM, MARKA) VALUES ('З 003 ЫЫ 77', 'renault');
insert into TRUCKS (TRUCKNUM, MARKA) VALUES ('О 003 СМ 77', 'renault');
select * from TRUCKS

Некорректно в самой таблице отображается буква Ш.
Теперь в PHP даю команду
$link = mysql_connect('localhost', 'root', '');
mysql_select_db('SITRANS');
mysql_query('SET NAMES utf8');
$result1 = mysql_query ('Select * from trucks');
$r = mysql_fetch_array($result1);
while ($r) {
echo $r['trucknum'];
$r = mysql_fetch_array($result1);

}


этот код ни в какую не хочет выводить нормальные кириллические символы на монитор. Я перебрал все возможные кодировки в ICONV, чтобы преобразовать их в CP1251 - не помогает. Пробовал задавать header для PHP-файла с различными кодировками - как мертвому припадки...
Пробовал при создании БД и таблицы не указывать кодировок, указывать CP1251 - тоже не вышло. КАК МНЕ ПОЛУЧИТЬ НОРМАЛЬНЫЕ ДАННЫЕ??? Уже пол-дня бьюсь головой об клавиатуру...



Спустя 15 минут, 57 секунд (12.03.2011 - 16:30) demoniqus написал(а):
проблему с некорректным отображением буквы Ш решил - пересоздал БД и таблицу
create database SITRANS default character set cp1251 collate cp1251_general_ci;
connect SITRANS;
create table TRUCKS (IND integer not null auto_increment primary key, TRUCKNUM char(12) not null, MARKA text not null) default character set cp1251 collate cp1251_general_ci;

Спустя 6 минут, 12 секунд (12.03.2011 - 16:36) Michael написал(а):
в денвере есть phpmyadmin. В нем все это можно делать, без всяких проблем с кодировкой

Спустя 3 часа, 57 минут, 18 секунд (12.03.2011 - 20:33) demoniqus написал(а):
phpmyadmin помог решить проблему, но так и не прояснил, в чем я ошибся... просто через DOS-овское окно мне гораздо сподручнее и быстрее работать...
кстати, сейчас DOS-овское окно некорректно отображает символы кириллицы. Проверил кодировку базы - cp1251, таблицы - cp1251. На монитор все выводится нормально без лишней перекодировки.

Спустя 13 часов, 14 минут, 29 секунд (13.03.2011 - 09:48) demoniqus написал(а):
Сидел, разбирался со своим вопросом. Выяснил: phpmyadmin добавляет запись в таблицу в нормальной кодировке, которая без проблем потом опознается моим скриптом, а проблема возникает при использовании DOS-овского окна mysql_run_to_import_dumps.exe - запись, созданная с его помощью, легко читается в нем самом, но находится в странной кодировке в отличие от использования phpmyadmin. В чем может быть загвоздка?

Спустя 9 минут (13.03.2011 - 09:57) T1grOK написал(а):
Консоль использует кодировку cp866, чтобы постоянно ее использовало можно забить настройку в my.ini.

Спустя 14 часов, 55 минут, 46 секунд (14.03.2011 - 00:52) Godwarlock написал(а):
Я использую navicat для работы с бд. Довольно удобная программа, а заливаю в бд таблицы и поля через sql файлы.

Спустя 21 минута, 10 секунд (14.03.2011 - 01:13) Trianon написал(а):
При работе в консольном клиенте тоже следует выполнять оператор SET NAMES
(либо, как вариант, указывать charset через ключ консольной версии --charset= )
При чем указываемая кодировка должна соответствовать кодировке, в которой работает сама системная консоль.
Кодировка эта, как тут уже было замечено - cp866 .
Хотя и её тоже можно изменить. Командой CHCP .
CHCP 866
CHCP 1251
CHCP 65001
последний вариант аккурат для utf-8
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.