CAHTA_
|
|
« : 05-02-2007 06:33 » |
|
Так сказать моё освоение perl+sql прродолжается. вот возникла проблема с выводом русских символов.
сождел в mysql таблицу, там написал по-русски. при попытке вывести эту строку поплучаю строку из символов "?".
как с этим бороться?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #1 : 05-02-2007 06:49 » |
|
CAHTA_, подумай о кодировках. Perl тут не при чем.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #2 : 05-02-2007 07:01 » |
|
в шеле тоже выводится ахинея с "?" в браузре испробовал все доступные кодировки...
|
|
|
Записан
|
|
|
|
CAHTA_
|
|
« Ответ #3 : 05-02-2007 09:19 » |
|
что делать то? в шеле локаль на koi8-r. но смено ахинея выводится в шеле... ввиде "?"
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #4 : 05-02-2007 10:34 » |
|
Не помню точно, но помоему MySQL все текстовые данные по умолчанию хранит в кодеровке UTF-8. Если это так то тебе надо либо переназначить кодеровку для хранения тексовых данных, либо ручками делать перекодеровку.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #5 : 05-02-2007 10:40 » |
|
Во-первых, стоит выяснить, кодировку исходного материала, занесенного в базу и какие манипуляции выполнила программа, занесшая сие. Во-вторых, посмотреть версию базы - линейка 5.х поддерживает управление кодировками на уровне баз, таблиц и столбцов. Ну и наконец, дефолтная настройка для клиента (см. в конфиге).
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
CAHTA_
|
|
« Ответ #6 : 05-02-2007 14:16 » |
|
версия mysql 4.1.22 вот сама таблица. CREATE TABLE fg_t ( foto_id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (foto_id), f_name VARCHAR(100) NOT NULL, f_w_h VARCHAR(11) NULL, f_s VARCHAR(6) NULL, fgroup VARCHAR(50) NULL, mcomm VARCHAR(150) NULL, ucomm VARCHAR(20) NULL ); вот перл код. с помошью которого я бытаюсь получить строку, расположенную в mcomm#! /usr/bin/perl -w print "content-type: text/html \n\n";
use strict; use DBI; use lib qw(/usr/local/apache/lib/perl); use CGI qw(:standard);
my ($dbh, $sth); $dbh = DBI->connect ( "DBI:mysql:host=***;database=***", "***", "***", {PrintError=>0, RaiseError=>1} ); $sth = $dbh -> prepare("SELECT mcomm FROM fg_t WHERE foto_id = 19"); $sth -> execute();
my @val = $sth->fetchrow_array();
print $val[0];
$sth -> finish(); $dbh -> disconnect(); exit(0); должно выдавать строку " Чечня, Грозный, гостиница "Советская". Ожесточенный бой", а выдает строку " ??, ?, " ". " =( пытаясь исправить положение, войдя в mysql,ввел команду set CHARACTER SET cp1251. но не помогло =( P.S. смайл = 3х "?"
|
|
« Последнее редактирование: 05-02-2007 14:20 от CAHTA_ »
|
Записан
|
|
|
|
CAHTA_
|
|
« Ответ #7 : 05-02-2007 14:19 » |
|
и еше... mysql> INSERT INTO fg_t VALUES('','I_oo11.jpg','600*917','291','b_fotik','',''); Query OK, 1 row affected, 1 warning (0.00 sec) почему предупреждение то?
|
|
« Последнее редактирование: 15-12-2007 21:55 от Алексей1153++ »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #8 : 05-02-2007 14:43 » |
|
Выполни скрипт в консоле.
Про источник данных ты ничего не написал!
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #9 : 12-09-2008 11:42 » |
|
Ситуация аналогичная. При создании базы данных указывал опцию: CHARACTER SET cp1251. Создал файл с данными для одной из таблиц базы в кодировке cp1251. Добавляю его в таблицу с помощью LOAD DATA INFILE.... В терминале смотрю таблицу: - получаю имена мейкеров в виде Думаю, может терминал не понимает. Посмотрел в Настройка->Кодировка стоит cp1251. Очистил таблицу, затем установил кодировку для конкретной таблицы: ALTER TABLE makers CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci; Опять добавил записи в таблицу - ничего не изменилось. Опять одни знаки вопроса, вместо букв! Как же все-таки сделать правильно?
|
|
|
Записан
|
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #10 : 12-09-2008 12:07 » |
|
Прошу прощения, нашел в чем дело! Просто в клиенте надо было указать кодировку: и всего-то!!
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #11 : 12-09-2008 14:21 » |
|
andrystepa, для начала: какая версия mysql-сервера?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #12 : 25-09-2008 07:24 » |
|
RXL, andrystepa, для начала: какая версия mysql-сервера?
Версия сервера mysql-server-5.0.45-6.fc8.i386. Команда к сожалению помогает только до перезагрузки. Команды SET GLOBAL character_set_client='cp1251';
SET GLOBAL character_set_results='cp1251';
SET GLOBAL character_set_connection='cp1251';
вообще не помогают. К тому же эта команда выправляет отображение символов только в консоли. В любом веб-браузере все равно выдаются одни знаки вопроса! По команде SHOW VARIABLES про кодировки пишется такое: character_set_client | cp1251 | | character_set_connection | cp1251 | | character_set_database | cp1251 | | character_set_filesystem | binary | | character_set_results | cp1251 | | character_set_server | latin1 | | character_set_system | utf8 |
Это после команды SET NAMES ...
|
|
« Последнее редактирование: 25-09-2008 07:26 от andrystepa »
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #13 : 25-09-2008 18:21 » |
|
andrystepa, SET NAMES не до перезагрузки работает - это влияет только на одну сессию (в которой выполняется) и только на время сессии. А с кодировками у тебя ужас какой-то... Давай будем примерами оперировать. Вот такая настройка (в конфиге, блок mysqld) character-set-client-handshake character-set-filesystem = utf8 character-set-server = utf8 default-character-set = utf8
дает mysql> show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | utf8 | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
При подключении я указываю либо --default-character-set=utf8 (когда работаю консольным mysql-клиентом или бекаплю утилитой mysqldump), либо выполняю SET NAMES utf8 (в случае других программ). Это дает такой эффект: mysql> show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
Где character_set_database зависит от DEFAULT CHARACTER SET при создании или модификации базы.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
andrystepa
Помогающий
Offline
|
|
« Ответ #14 : 26-09-2008 12:06 » |
|
RXL, С кодировками действительно ужас. А все потому, что мне надо чтобы данные в базе хранились на русском языке, причем изменяться и обновляться они будут через веб интерфейс (написанный на php) из Виндовых веб браузеров (чаще всего это Internet Explorer). Я предположил что в этом случае удобнее использовать кодировку win1251, поэтому базу данных создал с DEFAULT CHARACTER SET win1251. А в my.cfg, в секции [mysqld], впрочем, как и в других секциях, никаких упоминаний о кодировке нет - то есть все по дефаулту. Поэтому я никак не могу определить, что же туда следует написать в моем случае (локаль у меня utf8). Данные в базу записывал в кодировке win1251. И веб-интерфейс пишу в этой же кодировке.
|
|
|
Записан
|
|
|
|
Paymer-Soft
Новенький
Offline
|
|
« Ответ #15 : 08-12-2013 03:06 » |
|
После старта сессии MySQL нужно выполнять команду SET NAMES 'cp1251';
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #16 : 08-12-2013 07:28 » |
|
После старта сессии MySQL нужно выполнять команду SET NAMES 'cp1251';
Зачем откапывать тему и дублировать информацию?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|