<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Форум PHP-MyAdmin.RU &mdash; Что-то непонятное с кодировками]]></title>
		<link>https://forum.php-myadmin.ru/viewtopic.php?id=1262</link>
		<atom:link href="https://forum.php-myadmin.ru/extern.php?action=feed&amp;tid=1262&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Что-то непонятное с кодировками».]]></description>
		<lastBuildDate>Tue, 09 Jun 2009 11:40:17 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8382#p8382</link>
			<description><![CDATA[<p><strong>Shopen</strong><br />Бинарные данные объединяются как есть, то есть в каком бы виде они не были, просто присоединяются байты, кодировки в расчет не принимаются вовсе.</p><p>ФЦ&nbsp; &nbsp; &nbsp;?? + 96 + тест - Такое будет если на главной странице phpMyAdmin выбрать сравнение utf8_general_ci, а вы попробуйте там выбрать cp1251_general_ci, и увидите вместо &quot;тест&quot; вопросики. Тонкостей в работе кодировок достаточно много, но исходить надо из правил написания запроса - стандарта - который говорит: что при конкатенации, для возвращения данных в виде строки, бинарные данные и числа должны быть конвертированы в строку функцией CAST().</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Tue, 09 Jun 2009 11:40:17 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8382#p8382</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8380#p8380</link>
			<description><![CDATA[<p>Да, типы полей вы правильно угадали.</p><p>Всё равно не понятно. Разве в binary может быть часть данных в пределах поля, а не все оно целиком? Да, pma показывает, что результат binary, но при этом часть данных показывает корректно, а часть нет. Ведь если дело только в mysql, то запрос должен был бы вернуть только ????????, а не &#039;?? + 96&#039;. Т.е. часть этих самых binary-данных он показывает, а часть почему то нет. Даже если написать так - </p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONCAT(codeorgch,&#039; + &#039;,n_org,&#039; + &#039;, &#039;тест&#039;)
FROM tbl
LIMIT 5</code></pre></div><p>то в результате:<br /></p><div class="codebox"><pre><code>ФЦ     ?? + 96 + тест
ФЦ     ?? + 96 + тест</code></pre></div><p>Разве это не похоже на то, что первые два символа попросту пришли в другой кодировке?</p><p>Кстати, вот такой запрос опять же возвращает нормальный результат и без указания CAST:</p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONVERT(CONCAT(codeorgch,&#039; + &#039;,n_org) USING cp1251)
FROM tbl
LIMIT 5</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Shopen)]]></author>
			<pubDate>Mon, 08 Jun 2009 23:06:23 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8380#p8380</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8378#p8378</link>
			<description><![CDATA[<p>Бинарный вывод - это вывод в виде BLOB/BINARY данных.</p><p>Если хотите конкретики, то следует указать тип данных полей, которые вы объединяете. Как я понял поле codeorgch имеет тип VARCHAR, поле n_org - INT. Если в phpMyAdmin, в блоке параметров убрать галочку &quot;Покзаать BINARY&quot;, то увидите не вопросики, а данные в виде BINARY. Если поле codeorgch имело бы тип TEXT, то вы бы увидели вывод данных в виде BLOB.</p><p>Но это не проблема phpMyAdmin, а особенность работы с типами данных MySQL.</p><p>В Денвере старая версия phpMyAdmin и там вроде нет галочки &quot;Показать BINARY&quot; вовсе.</p><p>Новые версии phpMyAdmin работают с MySQL только в utf8 в независимости от кодировок таблиц и БД. То, что на Денвере показывает - значения не имеет, так как очень старое, желательно его обновить.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Mon, 08 Jun 2009 21:29:53 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8378#p8378</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8376#p8376</link>
			<description><![CDATA[<p>Я не очень понимаю, что такое бинарный вывод, но MySQL Query Browser показывает как положено &quot;ФЦ + 96&quot;, правда обрезает в таблице результатов цифры, но если открыть поле в доп. окошке - то там всё в порядке.</p><p>Более того, сейчас скопировал проблемную базу себе на localhost, и выполнил запрос денверовским PMA - результат нормальный. Из чего делаю вывод, что проблема все таки в настройках PMA. Из того, что очевидно различается - на сервере pma почему то уверенно пишет, что у mysql кодировка utf-8, а на локалхосте, что cp1251. Все таблицы у меня в 1251.</p>]]></description>
			<author><![CDATA[null@example.com (Shopen)]]></author>
			<pubDate>Mon, 08 Jun 2009 12:47:09 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8376#p8376</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8375#p8375</link>
			<description><![CDATA[<p><strong>Shopen</strong><br />phpMyAdmin всегда возвращает значения в том виде, как они приходят от MySQL, и в данном случае строка будет бинарной. Другие клиенты могут производить предварительную конвертацию своим парсером запроса, либо возвращать данные, как есть, а там уже браузер пусть думает.</p><p>Если посмотреть клиент MySQL Query Browser, то там вывод будет бинарный, как и должно быть.</p>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Mon, 08 Jun 2009 12:08:28 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8375#p8375</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8374#p8374</link>
			<description><![CDATA[<p>Hanut, спасибо, ваш совет помог. Ни за что бы сам не догадался до этого <img src="https://forum.php-myadmin.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Остался открытым только один вопрос - почему кодировки бьются только если я использую pma - а в других клиентах все работает и без CAST?</p>]]></description>
			<author><![CDATA[null@example.com (Shopen)]]></author>
			<pubDate>Mon, 08 Jun 2009 10:42:21 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8374#p8374</guid>
		</item>
		<item>
			<title><![CDATA[Re: Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8373#p8373</link>
			<description><![CDATA[<p><strong>Shopen</strong><br />Конкатенация зависит от типа объединяемых значений: если все аргументы функции являются не бинарными строками, то результат будет возвращен в виде не бинарной строки; если один, или более, аргумент является бинарной строкой, то результат будет возвращен в виде бинарной строки. Важным моментом является поведение числовых значений - они переводятся в бинарный вид. То есть конкатенация строки и целого числа вернет строку в бинарном виде. Чтобы получить результат в виде не бинарной строки, следует принудительно преобразовать число в строку с помощью функции CAST().</p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONCAT(codeorgch,&#039; + &#039;, CAST(n_org AS CHAR))
FROM tbl
LIMIT 5</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Hanut)]]></author>
			<pubDate>Mon, 08 Jun 2009 10:33:45 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8373#p8373</guid>
		</item>
		<item>
			<title><![CDATA[Что-то непонятное с кодировками]]></title>
			<link>https://forum.php-myadmin.ru/viewtopic.php?pid=8372#p8372</link>
			<description><![CDATA[<p>Здравствуйте.<br />Имеем вот такой запрос, выполненный через phpmyadmin:</p><div class="codebox"><pre><code>SELECT
        codeorgch,
        CONCAT(codeorgch,&#039; + &#039;,n_org)
FROM tbl
LIMIT 5</code></pre></div><p>Результат будет примерно такой:<br /></p><div class="codebox"><pre><code>codeorgch     CONCAT(codeorgch,&#039; + &#039;,n_org)
ФЦ     ?? + 96
ФЦ     ?? + 96
ФЦ     ?? + 96
ФЦ     ?? + 96</code></pre></div><p>Видно, что во втором столбце полетела кодировка, вот только непонятно почему. Если в функцию concat третьим аргументом поставить например число (или вовсе убрать его) - то все нормально:</p><div class="codebox"><pre><code>codeorgch     CONCAT(codeorgch,&#039; + &#039;,11)
ФЦ     ФЦ + 11
ФЦ     ФЦ + 11
ФЦ     ФЦ + 11
ФЦ     ФЦ + 11</code></pre></div><p>Также хорошо видно, что без CONCAT() значение этого же стобца (первый) показывается корректно, остальные столбцы тоже. <br />В других клиентах проблем нет, например когда я такой же скрипт выполняю в своём скрипте - то результат нормальный всегда. Также он нормальный из других клиентов (типа ems sql manager). Как с эту проблему побороть?</p><br /><p>P.S. Да, от версии pma это не зависит, скачал поставил последний, 3.1.5 - там тоже самое. до этого стоял 2.11.4.<br />mysql - 5.0.45, windows server 2003</p>]]></description>
			<author><![CDATA[null@example.com (Shopen)]]></author>
			<pubDate>Mon, 08 Jun 2009 09:18:52 +0000</pubDate>
			<guid>https://forum.php-myadmin.ru/viewtopic.php?pid=8372#p8372</guid>
		</item>
	</channel>
</rss>
