Тези встъпителни думи към поредната ни среща написах тук преди време.
Към днешен ден версията порасна на 3.3.9.2deb1~lucid1~ppa1 под Ubuntu 10.04. Малък недъг ме дразни оттогава. При отсъствие активност в течение на 24 мин, phpMyAdmin справедливо ви изхвърля от сесията и ви подканва към поредно въвеждане на паролата за вход с надпис:
No activity within 1440 seconds
Решение:
- Достъп до /etc/phpmyadmin/config.inc.php и чрез текстови редактор добавяме нов ред: $cfg['LoginCookieValidity'] = 3600;// 1 час
За интервал по ваше желание задайте нужното време, например, 36000 - 10 часа.
- Редактираме /etc/php5/apache2/php.ini и задаваме значение
на параметър session.gc_maxlifetime
session.gc_maxlifetime = 3600 - Презареждаме Apache, за да влязат измененията в сила
/etc/init.d/apache2 restart
MySQL Default engine InnoDB
В царството на слепите човек с едно око е царят. Ако имате две очи сигурно сте забелязали, че мотор по подразбиране (default engine) в MySQL е MyISAM.
Промяна от MyISAM на InnoDB предлага следното решение:
- sudo /etc/init.d/mysql stop
- sudo gedit /etc/mysql/my.cnf
В появилия се редактор премахваме коментара пред default-storage-engine=innodb
- sudo /etc/init.d/mysql start
- sudo /etc/init.d/apache2 restart
ft_min_word_len
По подразбиране думи, съставени по-малко от четири символа се игнорират. Кратките думи не се индексират и това е с цел увеличение на производителността на MySQL. Подобно положение поражда проблеми. Все пак трибуквени съкращения са практика за съставните на технически текстове. Този нюанс може да се изглади като се промени значение на променлива ft_min_word_len.
В MySQL ft_min_word_len по подразбиране е равна на '4' и не е описана в my.cnf. Моментното и значение може да се провери в mysql-монитора, чрез следната заявка:
mysql> SHOW VARIABLES LIKE '%ft_min_word_len%';
+-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | ft_min_word_len | 4 | +-----------------+-------+За промяна на текущата стойност добавете ft_min_word_len = 3 в файл my.cnf под секция [mysqld].
- Рестартирайте сървъра, за да влязат промените в сила:
# /etc/init.d/mysql restart
- Престроите вашите индекси REPAIR TABLE your table_name QUICK;
DEFAULT CHARACTER SET
Кодировката по подразбиране в MySQL е latin1. Този избор поражда чупене на кирилизирани текстове, което е много неприятно. Нека погледнем на практика съответните променливи за целта.
mysql> SHOW VARIABLES LIKE '%character%';
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+mysql> SHOW VARIABLES LIKE '%collation%';
+----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+Моите предпочитания са в полза на UTF-8. Това налага създаване на поредна база данни в phpMyAdmin да започва по следния начин.
В PHP подобни колизии с кодировката се решават с допълнителна заявка, наричани от някои като хак на енкодинга:
//съединение с MySQL $id=mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('No server connected'); //избор база данни mysql_select_db(DB_NAME, $id) or die('No DB selected'); //хак на енкодинга mysql_query('SET CHARACTER SET utf8', $id); // mysql_query('SET NAMES utf8', $id);В mysql-монитора заявката следва да бъде подобна:
mysql> CREATE DATABASE someNewDB DEFAULT CHARACTER SET utf8;
Заявката създава в каталог /var/lib/mysql/someNewDB файл db.opt с следното съдържание:
default-character-set=utf8
default-collation=utf8_general_ci
Същото по-горе на практика:
root@prodesktop:/var/lib/mysql/someNewDB# ls -l total 4 -rw-rw---- 1 mysql mysql 61 2012-06-09 15:31 db.opt root@prodesktop:/var/lib/mysql/someNewDB# cat db.opt default-character-set=utf8 default-collation=utf8_general_ci
Подобни ритуали са леко отегчителни, затова може твърдо да се зададе UTF8 в файл my.cnf. Добавете следните записи в съответните секции:
[client] default-character-set=utf8 [mysqld] default-character-set=utf8 default-collation=utf8_general_ci character-set-server=utf8 init-connect='SET NAMES utf8;' # init_connect='SET collation_connection = utf8_general_ci' collation-server=utf8_general_ci # skip-character-set-client-handshake [mysql] default-character-set=utf8Рестартирайте сървъра и проверете изменения с показаните горе заявки.
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+
до нови срещи ^.^
0 Response to "MySQL съвети и трикове"
Публикуване на коментар