<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум PHP-MyAdmin.RU &mdash; Помогите написать процедуру пожалуйста!!!]]></title>
	<link rel="self" href="https://forum.php-myadmin.ru/extern.php?action=feed&amp;tid=910&amp;type=atom" />
	<updated>2008-09-21T10:48:16Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.php-myadmin.ru/viewtopic.php?id=910</id>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5885#p5885" />
			<content type="html"><![CDATA[<p>Спасибо за скрипт и методику! На досуге буду разбираться! <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> Если что опять за помощью приду <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-21T10:48:16Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5885#p5885</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5881#p5881" />
			<content type="html"><![CDATA[<p><strong>Tankoff</strong><br />Результат будет, но надо чётко понимать что делать, так как там все настройки необходимо выставить вручную.</p><p>Этапы перекодировки.<br />1) Создаем дамп в utf8 (изначально он так и создастся).<br />2) Открываем дамп в текстовом редакторе и смотрим на то как выглядят крякозябы и какие кодировки в структурах таблиц требуется заменить на utf8/utf8_general_ci или utf8_bin для бинарных данных.</p><p>Если будут сомнения - покажите крякозябы и структуры таблиц - постараюсь помочь.<br />Важно понимать, что в таблицах с кодировкой cp1251 у вас хранился utf8, но в phpMyAdmin он отображался символами из таблицы cp1251, что и вызывает крякозябы.</p><p>Правильные данные в phpMyAdmin всегда отображаются корректно.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2008-09-19T12:27:40Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5881#p5881</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5878#p5878" />
			<content type="html"><![CDATA[<p><strong>Hanut</strong> скиньте пожалуйста тот скрипт, про который вы говорите в соседней теме! Попробую перегнать кодировку им, как думаете будет результат?</p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-19T05:56:10Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5878#p5878</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5877#p5877" />
			<content type="html"><![CDATA[<p>&gt;&gt; Если данные в БД критичны и их необходимо сохранить, то потребуется перекодировка. Это сложно и надо разбираться отдельно, поэтому лучше создать таблицы заново.</p><p>К сожалению у меня целая куча таблиц и большинство из них имеет данные которые ни в коем случае нельзя удалять.<br />Просто на этой базе уже давно работает проект и ща я его полностью переписываю (программную чатсть), а база остается прежняя.</p><p>Я хотел перегнать кодировку следущим образом:</p><p>1. Созал таблицу (например `users_copy`) с кодировкой utf8_general_ci и в ней все проля сделал с utf8_general_ci (которым необходимо ставить кодировку конечно).</p><p>2. С помощью PHP скрипта забирал данные из таблы `users` имеющую кодировку cp1251 и заливал их в таблицу `users_copy`.<br />Теоретически данные должны сохраниться нормально, но не тут то было. Некоторые буквы, такие как Ш превращались в крокозябры, а некоторые сохронялись нормально.</p><p>Подскажите пожалуйста, какие есть способы перекодировки данных?</p><p>Если у меня будет база с кодировкой utf8_general_ci, таблица с кодировкой utf8_general_ci и поле с кодировкой utf8_general_ci то записав в него данные в кодировке utf8 (в частности кирилицу) через phpMyAdmin я буду видеть нормальные буквы в обзоре таблицы или иероглифы?</p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-19T05:23:38Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5877#p5877</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5874#p5874" />
			<content type="html"><![CDATA[<p><strong>Tankoff</strong><br />Конечно же причина в том, что данные в utf8 лежат в таблицах с кодировкой cp1251. А также кодировка соединения с MySQL у вас cp1251 (character_set_connection&nbsp; &nbsp; cp1251), по причине чего скрипт не сможет нормально работать.</p><p>Что надо сделать:<br />1) В скрипте сразу после функции mysql_connect необходимо добавить строку:<br /></p><div class="codebox"><pre><code>mysql_query(&#039;SET NAMES utf8&#039;);</code></pre></div><p>2) Все таблицы в БД пересоздать с кодировкой utf8. Именно пересоздать, а не поменять сравнение в phpMyAdmin.</p><p>Если данные в БД критичны и их необходимо сохранить, то потребуется перекодировка. Это сложно и надо разбираться отдельно, поэтому лучше создать таблицы заново.</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2008-09-17T21:04:45Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5874#p5874</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5871#p5871" />
			<content type="html"><![CDATA[<p>SHOW GLOBAL VARIABLES LIKE &#039;char%&#039;;<br />Выдал:</p><p>Variable_name &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Value <br />character_set_client&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cp1251<br />character_set_connection&nbsp; &nbsp; cp1251<br />character_set_database&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cp1251<br />character_set_filesystem &nbsp; &nbsp; binary<br />character_set_results&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cp1251<br />character_set_server&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cp1251<br />character_set_system&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; utf8<br />character_sets_dir&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /usr/share/mysql/charsets/</p><br /><p>А из phpMyAdmin запросы в которых кирилица не работают, в плане того что возращают 0.<br />Объясняю (возможно в этом и вся моя проблема)</p><p>Страницы у меня на сайте в utf-8, а в бд поля все cp1251 и вся кирилица через phpMyAdmin отображается мне как иероглифы типа: РЎРёСЃС‚РµРјР°<br />Может в этом дело? Данные в Utf8 записывал в поля с кодировкой cp1251?</p><p>Ничего не пойму! <img src="https://forum.php-myadmin.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-17T16:58:35Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5871#p5871</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5869#p5869" />
			<content type="html"><![CDATA[<p><strong>Tankoff</strong><br />Посмотрите как запрос с измененным регистром искомого текста работает из phpMyAdmin.<br />Select COUNT(*) From `users` Where `user` = &#039;ТЕСТ&#039;;</p><p>Покажите вывод:<br />SHOW GLOBAL VARIABLES LIKE &#039;char%&#039;;</p>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2008-09-17T16:02:29Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5869#p5869</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5867#p5867" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Hanut сказал:</cite><blockquote><p><strong>Tankoff</strong><br />С cp1251_bin на cp1251_general_ci можно безболезненно поменять сравнение у поля. <strong>Но обратите внимание, что речь идет именно о поле `user`</strong>, а не о всей таблице. Примерный вид запроса:<br /></p><div class="codebox"><pre><code>ALTER TABLE `users` CHANGE `user` `user` TINYTEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL;</code></pre></div></blockquote></div><p>Я понял это, я через phpMyAdmin поменял на cp1251_general_ci, но говорю, что к латинице регистронезависимый подход, а к кирилице нет.<br />Незнаю что делать.</p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-17T14:38:06Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5867#p5867</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5866#p5866" />
			<content type="html"><![CDATA[<p><strong>Tankoff</strong><br />С cp1251_bin на cp1251_general_ci можно безболезненно поменять сравнение у поля. Но обратите внимание, что речь идет именно о поле `user`, а не о всей таблице. Примерный вид запроса:<br /></p><div class="codebox"><pre><code>ALTER TABLE `users` CHANGE `user` `user` TINYTEXT CHARACTER SET cp1251 COLLATE cp1251_general_ci NULL DEFAULT NULL;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2008-09-17T14:22:47Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5866#p5866</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5865#p5865" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Hanut сказал:</cite><blockquote><p><strong>Tankoff</strong><br />В данном случае нет необходимости в процедуре, достаточно правильно выставленной кодировки сравнения у поля `user`.<br />Предположим, что у нас поле `users`.`user` имеет кодировку сравнения utf8_general_ci, что означает: Юникод <strong>регистронезависимый</strong>. Таким образом запросы ниже выдадут идентичный результат:<br />Select COUNT(*) From `users` Where `user` = &#039;тест&#039;;<br />Select COUNT(*) From `users` Where `user` = &#039;ТЕСТ&#039;;<br /></p><div class="codebox"><pre><code>$sql = &#039;Select COUNT(*) From `users` Where `user` = &quot;&#039; . $user . &#039;&quot;&#039;;
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
mysql_free_result($result);

if ($row[0] &gt; 0) {
// Ошибка такой юзер уже есть в БД
} else {
// Процедура регистрации ника
}</code></pre></div></blockquote></div><p>Спасибо за инфу, это меняет дело, но появилась другая проблема!<br />У меня поле имеет кодировку cp1251_bin, если я делаю utf8_general_ci, то вся кирилица превращается в иероглифы, если делаю cp1251_general_ci, то канает тока с латинскими а с кирилицей не идет. Как мне поменять кодировку поля чтоб не закосячить данные? Подскажите пожалуйста!!!</p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-17T13:55:34Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5865#p5865</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5862#p5862" />
			<content type="html"><![CDATA[<p><strong>Tankoff</strong><br />В данном случае нет необходимости в процедуре, достаточно правильно выставленной кодировки сравнения у поля `user`.<br />Предположим, что у нас поле `users`.`user` имеет кодировку сравнения utf8_general_ci, что означает: Юникод <strong>регистронезависимый</strong>. Таким образом запросы ниже выдадут идентичный результат:<br />Select COUNT(*) From `users` Where `user` = &#039;тест&#039;;<br />Select COUNT(*) From `users` Where `user` = &#039;ТЕСТ&#039;;<br /></p><div class="codebox"><pre><code>$sql = &#039;Select COUNT(*) From `users` Where `user` = &quot;&#039; . $user . &#039;&quot;&#039;;
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
mysql_free_result($result);

if ($row[0] &gt; 0) {
// Ошибка такой юзер уже есть в БД
} else {
// Процедура регистрации ника
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Hanut]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=181</uri>
			</author>
			<updated>2008-09-16T18:54:48Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5862#p5862</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Помогите написать процедуру пожалуйста!!!]]></title>
			<link rel="alternate" href="https://forum.php-myadmin.ru/viewtopic.php?pid=5861#p5861" />
			<content type="html"><![CDATA[<p>Здравствуйте!!!<br />Пришел к вам за помощью!<br />Требуется написать хранимую процедуру, а я никак не пойму как это сделать <img src="https://forum.php-myadmin.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p><p>Ща четко напишу чего надо добиться:</p><p>Проблема следущая, делаю систему авторизации / регистрации, есть таблица в которой хранятся юзеры, логин хранится в столбце `user`. </p><p>В общем перед тем как добавить данные в таблу я проверяю имеется такой юзер с таким логином в базе или нет. <strong>Регистр для меня не должен иметь значения</strong>, вот тут я сталкнулся с проблемой.</p><p>strtolower (PHP) и Lower (MySQL) приводит символы в нижний регистр только латинские, с кирилицей ничего не выходит, они их просто игнорируют.</p><p>Что касается strtolower то я написал функцию которая делает все вручную, а вот процедуру написать не умею, надо сделать процедуру которая будет работать точно так же как и функция в плане логики, ниже предоставляю код сценария:</p><br /><p>&lt;?php</p><p>function strtolower_my($str) {<br />&nbsp; &nbsp;$str = strtolower($str);<br />&nbsp; &nbsp;$search = array(<br />&nbsp; &nbsp; &nbsp; &#039;Й&#039;,&#039;Ц&#039;,&#039;У&#039;,&#039;К&#039;,&#039;Е&#039;,&#039;Н&#039;,&#039;Г&#039;,&#039;Ш&#039;,&#039;Щ&#039;,&#039;З&#039;,&#039;Х&#039;,&#039;Ъ&#039;,&#039;Ф&#039;,&#039;Ы&#039;,&#039;В&#039;,&#039;А&#039;,&#039;П&#039;,&#039;Р&#039;,&#039;О&#039;,&#039;Л&#039;,&#039;Д&#039;,&#039;Ж&#039;,&#039;Э&#039;,&#039;Я&#039;,&#039;Ч&#039;,&#039;С&#039;,&#039;М&#039;,&#039;И&#039;,&#039;Т&#039;,&#039;Ь&#039;,&#039;Б&#039;,&#039;Ю&#039;,&#039;Ё&#039;<br />&nbsp; &nbsp;);<br />&nbsp; &nbsp;$replace = array(<br />&nbsp; &nbsp; &nbsp; &#039;й&#039;,&#039;ц&#039;,&#039;у&#039;,&#039;к&#039;,&#039;е&#039;,&#039;н&#039;,&#039;г&#039;,&#039;ш&#039;,&#039;щ&#039;,&#039;з&#039;,&#039;х&#039;,&#039;ъ&#039;,&#039;ф&#039;,&#039;ы&#039;,&#039;в&#039;,&#039;а&#039;,&#039;п&#039;,&#039;р&#039;,&#039;о&#039;,&#039;л&#039;,&#039;д&#039;,&#039;ж&#039;,&#039;э&#039;,&#039;я&#039;,&#039;ч&#039;,&#039;с&#039;,&#039;м&#039;,&#039;и&#039;,&#039;т&#039;,&#039;ь&#039;,&#039;б&#039;,&#039;ю&#039;,&#039;ё&#039;<br />&nbsp; &nbsp;);<br />&nbsp; &nbsp;$str = str_replace($search, $replace, $str);<br />&nbsp; &nbsp;return $str;<br />}</p><p>$user = strtolower_my($_POST[&#039;user&#039;]);</p><p>$sql = &quot;Select `id`, `user` From `users` Where LOWER(`user`) = &#039;&quot; . $user . &quot;&#039;&quot;;</p><p>// Мне надо чтоб запрос выглядел типа так:<br />// $sql = &quot;Select `id`, `user` From `users` Where LOWER_MY(`user`) = &#039;&quot; . $user . &quot;&#039;&quot;;<br />// Где LOWER_MY это процедура которая делает тоже что и функция strtolower_my</p><br /><p>$query = mysql_query($sql);<br />$result = mysql_fetch_array($query);</p><p>if ($result[&#039;id&#039;]) {<br />// Ошибка такой юзер уже есть в БД<br />} else {<br />// Процедура регистрации ника<br />}</p><br /><p>?&gt;</p><br /><p>Надеюсь на вашу помощь, у меня вся работа на этом встала <img src="https://forum.php-myadmin.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p>]]></content>
			<author>
				<name><![CDATA[Tankoff]]></name>
				<uri>https://forum.php-myadmin.ru/profile.php?id=1538</uri>
			</author>
			<updated>2008-09-16T13:57:50Z</updated>
			<id>https://forum.php-myadmin.ru/viewtopic.php?pid=5861#p5861</id>
		</entry>
</feed>
