|
|
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
Имеем Mysql 5.5 - везде установлено utf8 "Variable_name" "Value" "character_set_client" "utf8" "character_set_connection" "utf8" "character_set_database" "utf8" "character_set_filesystem" "binary" "character_set_results" "utf8" "character_set_server" "utf8" "character_set_system" "utf8" "character_sets_dir" "/usr/local/share/mysql/charsets/" Создал таблицу, записал туда русские символы - при запросе из скрипта (Perl) выдаёт вместо нужных символов вопросы: ???????? Попытался записать этим же скриптом данные - записал, опять считываю - всё ок, но в базе абракадабра в формате cp1252. Как такое волшебство может происходить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 10:12:52 |
|
||
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
kosyakla, кодировка консоли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 10:15:57 |
|
||
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
tanglir, cp1251. Перед началом работы с БД делаю так: $query_setcharset = $dbh->prepare("SET NAMES cp1251"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 10:50:50 |
|
||
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
Кому интересно вот скрипт, ничего сложного не произвожу, просто вывод. #!/usr/bin/perl use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); use DBI; print CGI::header(-charset=>"windows-1251"); ######################################################## MYSQL SETTINGS $SQL_DATABASE = "cms_db"; $SQL_HOSTNAME = "localhost"; $SQL_PORT = "3306"; $SQL_USER = "cms_user"; $SQL_PASSWORD = '******'; ####################################################################### $dbh = DBI->connect("DBI:mysql:database=$SQL_DATABASE;host=$SQL_HOSTNAME;port=$SQL_PORT", $SQL_USER, $SQL_PASSWORD); $query_setcharset = $dbh->prepare("SET NAMES cp1251"); $query_setcharset = $dbh->prepare("USE $SQL_DATABASE"); $query_setcharset->execute(); $query_setcharset->finish(); print qq~ <html> <head> <title></title> <meta http-equiv="ext-Cache" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <body> ~; my $query = $dbh->prepare("select name from test"); $query->execute(); while (my $db_ln = $query->fetchrow_hashref()) { print $db_ln->{name} . "<br>"; } $query->finish(); $dbh->disconnect(); print qq~ </body> </html>~; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 10:53:55 |
|
||
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
Вот сейчас "ручками" записал в БД в кодировке latin1 (cp1252). Скрипт выводит всё ок, т.е. с latin1->cp1251 перекодировка проходит штатно. А вот с utf8->cp1251 никак не проходит. Так же не хочет в чистом utf8 выводить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 10:57:49 |
|
||
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
Сам ответил себе же. Perl не корректно отрабатывал SET NAMES Поставил так - $dbh->do("SET NAMES cp1251"); - заработало. Всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 11:24:04 |
|
||
|
Чудит mysql с кодировкой.
|
|||
|---|---|---|---|
|
#18+
kosyaklaPerl не корректно отрабатывал SET NAMES Он его просто не отрабатывал: kosyakla$query_setcharset = $dbh->prepare("SET NAMES cp1251"); $query_setcharset = $dbh->prepare("USE $SQL_DATABASE"); $query_setcharset->execute(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2014, 12:10:49 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1834784]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
89ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 433ms |

| 0 / 0 |
