Feb 22

Поставил я себе Windows Vista x64. Просто так поставил, делать было нечего. Эту тему обсуждать не хочу абсолютно.

Так вот, после установки последней стабильной версии MySQL (а это на данный момент версия 5.0.51a) у меня наотрез отказалась запускаться программа конфигурирования сервака. После первого запуска ничего не происходило, а последующие запуски приводили к сообщению о том, что программу нельзя запускать несколько раз (или что-то подобное, не помню уже). Путем недолгих поисков была найдена причина этого безобразия и возможное решение:

The fix is pretty simple. The UAC Manifest should read as follows:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<assemblyIdentity name="MySQLInstanceConfig.exe" version="1.0.10.0" processorArchitecture="x86" publicKeyToken="02ad33b422233ae3" type="win32"></assemblyIdentity>
	<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
		<security>
			<requestedPrivileges>
				<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
			</requestedPrivileges>
		</security>
	</trustInfo>
</assembly>

Instead of:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<assemblyIdentity name="MySQLInstanceConfig.exe" version="1.0.10.0" processorArchitecture="x86" publicKeyToken="02ad33b422233ae3" type="win32"></assemblyIdentity>
	<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
		<security>
			<requestedPrivileges>
				<requestedExecutionLevel level="asAdministrator" uiAccess="false"></requestedExecutionLevel>
			</requestedPrivileges>
		</security>
	</trustInfo>
</assembly>

The requested level «asAdministrator» is the culprit. It should, instead, be
«requireAdministrator».

You can use Resource Hacker to fix it yourself, until an official update is made.

Также было сказано, что:

With 5.0.45 installed, this error never occurs.

Т.е. для решения проблемы есть 2 варианта:

  1. Поставить версию 5.0.45
  2. Покопаться Resource Hacker’ом в исходниках MySQLInstanceConfig.exe

Хоть второе сложностей и не представляет, мной был выбран первый вариант. Для тех, кто тоже выберет его, вот вам ссылки на MySQL 5.0.45 (на сайте ссылок на них уже нет):

written by FX Poster \\ tags: ,

Jan 16

Читаем и офигеваем…

PS. Не ожидал… Очень не ожидал.

written by FX Poster \\ tags:

Dec 03

Предыстория такова: писал я скрипт, который коннектится к pop3-серверу, выдирает оттуда все аттачи с нужными названиями файлов, парсит эти файлы и заносит отпарсенные данные в бд. Все было отлично, пока я писал на линуксе (писал, естественно, на php + mysql), а вот при попытке запустить этот скрипт на свежеустановленной винде (естественно, с апачем и прочим барахлом) - пошли error’ы…

Сразу скажу - пост написан совсем не для того, чтобы учить меня юзать ORM и ActiveRecord. Всё мы знаем, всё умеем, ноэто не тот случай.

Начнем издалека, а именно с PHP. В нем есть такой хороший и нужный (кроме программеров на си) тип как boolean, у которого есть значения true и false. Все бы хорошо, но есть одна проблема - при работе с бд все значения нужно преобразовывать к типу string (ну, а как вы sql писать собираетесь)… Точнее, это не проблема, а такой факт… Проблемы начинают возникать, когда мы преобразовываем boolean -> string. Преобразование получается довольно хитрое, в результате которого мы вместо true получаем ‘1′, а вместо false - … нет, если бы мы ‘0′ получали - все было бы отлично… мы получаем ”, т.е. пустую строку.

Этой проблеме уже хер знает сколько лет. Лечить ее разработчикам, видимо, влом.

Естественно, при вставке в БД все значения квотятся. Т.е. если у нас был запрос, в котором значение для поля будет false - получим примерно следующее:

INSERT INTO table(column) VALUES('')

Если бы типом column была строка - было бы всё ок. Но у меня это было булевое поле (если быть точным - smallint(1), т.к. в MySQL нет типа Boolean). И вот в линуксе (ubuntu) на MySQL Server’е из стандартных репозиториев все работало замечательно. А в винде - начало ругаться на эту строку.

Естественно, в данном случае можно решить проблему храня в переменных PHP не true/false, а 1/0, но меня заинтересовало - а почему же на Linux’е все это дело работает.

Покопавшись в настройках сначала PHP, а потом и MySQL (после того, как в PHP’шных настроках ничего интересного не нашел) - в my.ini (конфигурационный файл MySQL) были найдены интересные строчки:

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

После того, как я их закомментировал, все заработало нормально, но…

Подытожу - при работе с MySQL в PHP не используйте переменные типа boolean, пользуйтесь int’ами. Даже если у вас все работает с true/false - не факт, что оно заработает у вашего заказчика.

written by FX Poster \\ tags: ,

Nov 04

А на самом деле кроме PHP еще и на знание MySQL и Linux, хотя логики я в этом не вижу.

PHP Test

Всего баллов 500. Вот теперь сижу и думаю - я что, PHP не знаю?.. :(

written by FX Poster \\ tags: , ,