Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MySQL. Русские символы отказываются добавляться.

32K
03 августа 2008 года
63uK
16 / / 19.04.2008
Проблема в следующем: есть локальный серв(Apache 2.2.9) и еще есть база данных(MySQL 5.0.51a). Допустим есть какая-то таблица, а в ней есть поле(`name` varchar(40) CHARACTER SET cp1251 NOT NULL). Никак не могу добавить в это поле русские символы через php скрипт хотя через phpMyAdmin все спокойно добавляется. Самое интересное что когда добавляю я, то значение id инкрементируется, но новое поле не появляется. Предпологаю что что-то с кодировкой, либо некоректно настроена БД. Как бы мне решить проблемку?)
1.9K
03 августа 2008 года
max_dark
256 / / 11.11.2005
Сам недавно сталкивался.
Необходимо настроить соединение:
Код:
#!/usr/local/bin/perl

use DBI;
use strict;
use constant endl => "\n";

my $base='test';
my $user='max';
my $pass='test';
my $host='localhost';
my $dbh=0;
my $sql=$ARGV[0];
my $charset='cp1251';
my $collation='cp1251_general_ci';

sub set_charset() {
    my @x=('client','connection','database','server','results');
    my $cs;
    foreach $cs (@x) {
        $dbh->do('set character_set_'.$cs.'='.$charset);
    }
}

sub set_collation() {
    my @x=('connection','database','server');
    my $cs;
    foreach $cs (@x) {
        $dbh->do('set collation_'.$cs.'='.$collation);
    }
}

sub puts( $ ) {
    print(shift,endl);
}

$dbh=DBI->connect("DBI:mysql:$base:$host",$user,$pass);
if (!$dbh) {
    die "Cannt connect\n";
}
puts('Connected');
print('Prepare charsets ');
set_charset();set_collation();
puts('done');

if ( -r $sql ) {
    puts('Info: using ['.$sql.'] for restore');
    my $cnt=0;
    open SQL,$sql;
    my $line='';
    while($line=<SQL>) {
        chomp($line);
        if (($line ne '') and (not($line =~/^#/))) {
            if (not $dbh->do($line) ) {
                puts('Error: '.$dbh->errstr);
                last;
            }
            $cnt++;
            if (($cnt % 20)==0) {
                puts($cnt);
            }
        }
    }
    puts('Total: '.$cnt);
    close SQL;
}
else {
    puts('Error: ['.$sql.'] not found or not readable');
}

$dbh->disconnect();
Код на перл, но думаю идея понятна
32K
03 августа 2008 года
63uK
16 / / 19.04.2008
Спасибо болшое. Вот решение: SET NAMES cp1251. Надесь больше проблем с кодировкой в MySQL у меня не возникнет)
312
04 августа 2008 года
dead_star
392 / / 26.11.2006
Цитата: 63uK
Спасибо болшое. Вот решение: SET NAMES cp1251. Надесь больше проблем с кодировкой в MySQL у меня не возникнет)


я использую следующие запросы:

 
Код:
SET NAMES cp1251
SET CHARACTER SET cp1251
SET character_set_connection = cp1251
SET collation_connection = cp1251
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог