UTF-8 и кириллица

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
User avatar
SergeV
New Member
New Member
Posts: 9
Joined: Wed Sep 02, 2009 6:25 pm

UTF-8 и кириллица

Post by SergeV »

При инсталяции CMS с внесенными изменениями на русском языке происходит некорректная запись (т.е. кракозябрами) в БД.
Проблему решил добавлением

Code: Select all

SET NAMES 'utf8'
в файл lib/adodb_lite/adodbSQL_drivers/mysql/mysql_driver.inc

Code: Select all

function _connect($host = "", $username = "", $password = "", $database = "", $persistent, $forcenew)
	{
		if (!function_exists('mysql_connect')) return false;

		$this->host = $host;
		if (!empty($this->port)) $this->host .= ":" . $this->port;
		$this->username = $username;
		$this->password = $password;
		$this->database = $database;		
		$this->persistent = $persistent;
		$this->forcenewconnection = $forcenew;

		if($this->persistent == 1)
		{
			if (strnatcmp(PHP_VERSION, '4.3.0') >= 0)
				$this->connectionId = @mysql_pconnect( $this->host, $this->username, $this->password, $this->clientFlags );
			else
				$this->connectionId = @mysql_pconnect( $this->host, $this->username, $this->password );
		}
		else
		{
			if (strnatcmp(PHP_VERSION, '4.3.0') >= 0)
				$this->connectionId = @mysql_connect( $this->host, $this->username, $this->password, $this->forcenewconnection, $this->clientFlags );
			else if (strnatcmp(PHP_VERSION, '4.2.0') >= 0)
				$this->connectionId = @mysql_connect( $this->host, $this->username, $this->password, $this->forcenewconnection );
			else
				$this->connectionId = @mysql_connect( $this->host, $this->username, $this->password );
		}

		if ($this->connectionId === false)
		{
			if ($fn = $this->raiseErrorFn) 
				$fn($this->dbtype, 'CONNECT', $this->ErrorNo(), $this->ErrorMsg(), $this->host, $this->database, $this);
			return false;
		}

		if (!empty($this->database))
		{
			if($this->SelectDB( $this->database ) == false)
			{
				$this->connectionId = false;
				return false;
			}
		}
        mysql_query("SET NAMES 'utf8'"); 
		return true;
	}
Это можно применить и к другим типам баз данных mysqli, PostgresSQL, и пр.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: UTF-8 и кириллица

Post by von-hamster »

1. Зачем так далеко? Это нужно править в include.php - там закоментированая строчка - тогда применится для всех баз.
2. Если версия 1.6, то там это уже включено должно быть
User avatar
SergeV
New Member
New Member
Posts: 9
Joined: Wed Sep 02, 2009 6:25 pm

Re: UTF-8 и кириллица

Post by SergeV »

Речь идет о первоночальном создании БД. Все приведенные на форуме исправления относительно корректной работы рус. символов в utf-8 применительны к уже установленной CMS
и $cmsdb->Execute('set names utf8');
и .htaccess ,
а запись в config.php происходит уже после создания БД.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: UTF-8 и кириллица

Post by von-hamster »

А причем тут config.php ?
Я говорил про include.php
User avatar
SergeV
New Member
New Member
Posts: 9
Joined: Wed Sep 02, 2009 6:25 pm

Re: UTF-8 и кириллица

Post by SergeV »

Еще раз -
запись  $cmsdb->Execute('set names utf8'); в include.php не актуальна при первоначальном создание БД.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: UTF-8 и кириллица

Post by von-hamster »

А при первоначальном создании БД выбираем кодировку по умолчанию... (если это именно создание)...
include.php - подключается всеми файлами по умолчанию, в том числе и инсталятором cms
User avatar
SergeV
New Member
New Member
Posts: 9
Joined: Wed Sep 02, 2009 6:25 pm

Re: UTF-8 и кириллица

Post by SergeV »

Хорошо, include.php подключается ко всему чему нужно, только при установке эта запись игнорируется - $DONT_LOAD_DB = false; и соединение идет через adodb  - $this->db =& adodb_connect();

Вообще имея на борту CMS adodb можно настраивать соединение с БД по своим критериям http://phpclub.ru/detail/article/adodb_1

Хотя я на своем варианте не настаиваю...  
Last edited by SergeV on Thu Sep 03, 2009 11:32 am, edited 1 time in total.
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: UTF-8 и кириллица

Post by ZYV »

SergeV в схеме 1.6 по умолчанию:
@$db->Execute("ALTER DATABASE `" . $db->database . "` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
$taboptarray = array('mysql' => 'ENGINE MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci', 'mysqli' => 'ENGINE MyISAM CHARACTER SET  utf8 COLLATE utf8_general_ci');
Так-то.
unsigned double ZYV;
Post Reply

Return to “Russian - русский”