Понадобилось мне на хостинг с уже установленным сайтом залить форум Invision Power Board. При этом дамп был с таблицами без префикса, а чтоб не было конфликтов с одноименными таблицами уже установленного сайта, хотелось использовать префиксы таблиц. Читать далее »
Столкнулся с любопытным багом (как выяснилось позже это была фича): приведение переменной к типу Float возвращало число, где разделителем была не точка, а запятая. Пример:
Само-собой числа разделенные запятой вызывали ошибку SQL при записи в поле с типом float. Как выяснилось, проблема была с локалью — если в указанной локали дробная часть числа отделяется от целой не точкой, а запятой, то функции приведения типов (такие как (float) и floatval) будут возвращать число, разделенное запятой. Т.о. решение предложенное тут вызвало проблемы в другом месте. Решается это указание локали для чисел:
Давно не работал с linux (все как-то больше FreeBSD), ставил php из сырцов, наткнулся на ошибку
ld: cannot find -lmysqlclient
с кучей подробностей, при этом пакет mysql-devel был установлен, оказалось, что поскольку у меня 64-битная CentOS, то надо об этом сообщить компилятору, делается это так:
--with-libdir=lib64
после чего, он начинает искать либы в /usr/lib64, а не в /usr/lib
гугл говорит, еще с этой ошибкой помогает опция
--with-mysql=mysqlnd
но я не пробовал.
Поставил себе локально последний MySQL 5.5 и сразу столкнулся с тем, что куча скриптов не работают как надо. Проблема в том, что по умолчанию MySQL ставится в strict mode, то есть он не завершает запрос при наличии определенных предупреждений. Например, если в автоинкрементное поле id вставляется не цифровое значение, а пустая строка, что должно привести к автоматическому присваиванию значения, MySQL не завершает запрос, а выдает предупреждение: 1366 Incorrect integer value. Это касается и других аналогичных ситуаций, ошибки могут быть вида Incorrect string value, Field doesn’t have a default value и т.п.
Решается проблема комментированием строки в my.ini (или my.cnf смотря какая у вас ОС)
#sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
и перезагрузкой MySQL. Хотя конечно, по-хорошему, надо бы писать на перспективу, так, чтобы запросы были корректные.
Решил поковырять Vtiger crm, но обломался уже на этапе установки. Как оказалось, он не поддерживает последние версии MySQL (5.5) и падает с ошибкой SQL:
vtiger You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Type=InnoDB' at line 7Error: Tables partially created. Table creation failed.
Гугл как всегда помог: надо просто в файле с описанием структуры БД (schema/DatabaseSchema.xml) заменить все вхождения Type=InnoDB на ENGINE=InnoDB. Надо думать, MySQL продолжает двигаться к сближению к стандарту SQL, при чем без обратной совместимости ![]()
Читаем релиз MySQL 5.5:
Указание типа хранилища через ключевое слово "TYPE" в блоке "CREATE TABLE" объявлено устаревшим, необходимо использовать директиву "ENGINE";
Ну что ж, обновляемся.
Как известно, чтобы привести IP адрес к числовому виду (так гораздо удобней хранить данные а базе) используется функция ip2long, но полученное число может быть отрицательное, например:
Выводит -939524095, при этом, функция MySQL INET_ATON(’200.0.0.1′) вернет 3355443201.
Т.о., если заносить в таблицу данные полученные от ip2long, а в выборке делать INET_NTOA то в ряде случаев полученные данные будут не верные. Кроме того, при использовании INET_ATON поле можно сделать unsigned.
Чтобы привести данные полученные от ip2long в вид, соответствующий INET_ATON можно пойти двумя путями (оба достаточно простые, какой выбрать дело ваше):
1. метод
$ipv4address = sprintf("%u", ip2long("200.0.0.1"));
$ipv4address = sprintf("%u", ip2long("200.0.0.1"));2. метод
Как-то назрела необходимость сравнить два веб-сервера по производительности. Банальные сравнения объема памяти и типов процессоров это конечно хорошо, но хотелось бы точно знать, насколько сервер А производительней сервера Б, учитывая что он дороже в несколько раз. О методике тестирования и будет этот пост.
Читать далее »