Author Archive

Возможные проблемы с MySQL

  1. Просто установить MySQL мало, нужно его еще  донастроить. Самое главное - нужно не забыть про настройку max_allowed_packet (максимально разрешенный размер пакета). Например, если max_allowed_packet равен 1 мегабает, то в один прекрасный день вы не сможет записать данные размером более 1 мегабайта. Появится ошибка вида: Packet for query is too large (27545659 > 1048576) Теперь о том, как увеличить max_allowed_packet.
    Для windows: В файле my.ini после строки[mysqld]пропишите следующее значение max_allowed_packet=512M Не забудьте перегрузить службу MySQL!
    Для redhat: В файле /etc/my.cnf в блок [mysqld] пропишите следующий параметр max_allowed_packet = 512M Не забудьте перегрузить сервиc mysqld!
    service mysqld restart
    

  2. При создании базы данных сразу же указывайте кодировку UTF-8, иначе в linux-системах, будет проблема с юникодными символами:
    CREATE DATABASE your_database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

  3. Проблема с кодировкой при подключении к базе данных. Допустим, у нас есть строка подключения с указанием кодировки UTF8: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8 Та же строка из-за экранирования символов в xml документе будет выглядеть так: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8 Если вы нечайно возьмете строку экранированную для xml с & ошибки не возникнет, но кодировка не установиться. Вместо кириллицы будут вопросительные знаки. В windows проблема c кодировкой может и не возникнет, но в unix и linux обязательно возникнет.
  4. Может возникнуть проблема с внешними ключами (foreign key). Очень важно следить какой движок у ваших таблиц. У связанных таблиц движок должен быть InnoDB. Если у одной таблицы движок InnoDB, а у другой MyISAM, внешний ключ будет создан, но вы не сможете вставить данные в столбец с Foreign Key. Как это исправить: 1) Нужно поменять движок у существующих таблиц. Для каждой таблицы выполните запрос:
    ALTER TABLE название_таблицы ENGINE=InnoDB;
    
    Чтобы вычислить таблицы с движок отличным от InnoDB выполните запрос:
    SELECT    
        TABLE_NAME,
        ENGINE,
        CONCAT(CONCAT('ALTER TABLE ',TABLE_NAME),' ENGINE=InnoDB;')
    FROM
        INFORMATION_SCHEMA.TABLES
    WHERE
        TABLE_SCHEMA=DATABASE() AND ENGINE <> 'InnoDB'
    
    Результатом будет: название таблицы, текущий движок таблицы и уже сформированный запрос на изменение движка на InnoDB. Вам остается выбрать запросы для тех таблиц, у которых вы хотите поменять движок. 2) Как можно проконтролировать создание таблиц именно с движком InnoDB. Во-первых, можно при создании таблицы явно указать движок InnoDB. Во-вторых, можно установить движок InnoDB по умолчанию. Для этого в файлах my.ini (для windows) и my.cnf (для linux) в секции [mysqld] сделайте следующую настройку:
    default-storage-engine=innodb
    

  5. MySQL по умолчанию хранить таблицы (innodb) в одном файле. Причем размер этого файла никогда не уменьшается, т.е. если он достиг одного уровня, и вы удалили некоторые данные, MySQL не отдаст это свободное пространство. Это может быть критично при дефиците свободного места на диске. Чтобы решить эту проблему нужно перед созданием базы данных добавить в конфигурационный файл опцию:
    innodb_file_per_table=1
    
    После установки этой опции каждая таблица будет храниться в отдельном файле. Это также может быть полезно при ограничении на размер файла в операционной системе. Для начала лучше потренироваться на тестовой базе данных, а потом пробовать на боевой, сняв перед этим резервную копию.

Шпаргалка по MySQL (Общее)

Создание базы данных:
CREATE DATABASE your_database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

Смена кодировки базы данных
ALTER DATABASE your_database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci

Просмотреть кодировки таблиц
SELECT TABLE_NAME,TABLE_COLLATION 
FROM information_schema.tables WHERE TABLE_SCHEMA = 'your_database'

Дать все привилегии на все базы и таблицы:
GRANT ALL PRIVILEGES ON *.* TO user@'%' IDENTIFIED BY 'your_passw' WITH GRANT OPTION;

Дать все привилегии на таблицы базы your_database:
GRANT ALL PRIVILEGES ON your_database.* TO user@'%' 
IDENTIFIED BY 'your_passw' WITH GRANT OPTION;

Поменять название и тип столбца с VARCHAR(255) на VARCHAR(2000):
ALTER TABLE YOUR_TABLE CHANGE YOUR_COLUMN YOUR_COLUMN_NEW_NAME VARCHAR(2000)

Поменять тип столбца с INT на DOUBLE:
ALTER TABLE YOUR_TABLE CHANGE YOUR_COLUMN YOUR_COLUMN_NEW_NAME DOUBLE

Переименовать таблицу:
ALTER TABLE OLD_TABLE_NAME RENAME NEW_TABLE_NAME

Название текущей базы данных:
SELECT DATABASE()

Информация о таблицах текущей базы данных (название, движок, размер в мегабайтах и кол-во записей):
SELECT
    TABLE_NAME,
    ENGINE,
    ROUND(DATA_LENGTH/1024/1024,2) AS TOTAL_SIZE_MB,
    TABLE_ROWS
FROM
    INFORMATION_SCHEMA.TABLES
WHERE
    TABLE_SCHEMA=DATABASE()
ORDER BY TOTAL_SIZE_MB DESC

Список всех подключений к MySQL:
SHOW PROCESSLIST

Просмотреть значения серверных переменных:
SHOW VARIABLES

Просмотреть значения серверных переменных, отвечающих за кодировку:
SHOW VARIABLES LIKE '%character%'

Кодирование символов казахского языка в Web

 
СимволКод в HTMLКод в JavaScript
Ә   ә&#1240;   &#1241;\u04D8   \u04D9
Ұ   ұ&#1200;   &#1201;\u04B0   \u04B1
І   і&#1030;   &#1110;\u0406   \u0456
Ң   ң&#1186;   &#1187;\u04A2   \u04A3
Ғ   ғ&#1170;   &#1171;\u0492   \u0493
Ү   ү&#1198;   &#1199;\u04AE   \u04AF
Қ   қ&#1178;   &#1179;\u049A   \u049B
Ө   ө&#1256;   &#1257;\u04E8   \u04E9
Һ   һ&#1210;   &#1211;\u04BA   \u04BB

Программный клик на ссылке в браузере Opera

Долгое время в проекте, над которым я работал, авторизация в браузере Opera проходила как-то не так. Суть проблемы была в том, что в браузере Opera 12.10, когда я в текстовое поле вводил пароль и нажимал Enter, авторизация не происходила (по нажатию Enter должна была нажаться ссылка OK). Хотя в других браузерах все работало прекрасно: Firefox 17.0.1, IE 9 и Chrome 24. Вот упрощенный пример:


ОК
Сам скрипт:

Долго искал решение. Оказалось в Opera нужно предотвращать стандарстное действие клавиши Enter, т.к. она перебивала клик на ссылке! Это делается методом preventDefault объекта event.

Мой рабочий стол

Всем привет! Сегодня я расскажу вам об организации своего рабочего стола. Вот он - ниже на картинке: Мой рабочий стол Как вы заметили на нем ни одного ярлыка. Программы, папки и скрипты я запускаю через окно «Выполнить». Оно вызывается сочетанием клавиш Win + R. Например, чтобы запустить MS Word, я нажимаю Win+R, набираю winword и нажимаю Enter. Microsoft Word Вот пример нескольких стандарных исполняемых файлов, которые можно запустить таким образом: winword - Microsoft Word excel - Microsoft Excel notepad - Блокнот iexplore - Internet Explorer cmd - Командная строка mspaint - Microsoft Paint mstsc - Удаленный рабочий стол calc - Калькулятор и т.д.. Также можно задать свои сокращения. Например, браузер Opera я запускаю так: 1) Win + R 2) Набираю 0 (ноль) 3) Нажимаю клавижу Enter Как это сделать? Нужно скопировать ярлык Opera в папку Windows Opera И переименовать скопированный ярлык на «0». Теперь набрав «0» в диалоговом окне "Выполнить" мы можем быстро открыть браузер Opera. Opera   Ниже преведены некоторые ярлыки из моей папки Windows: Ярлыки Чтобы быстро открыть папку Windows можно также воспользоваться диалоговым окном Выполнить и в нем набрать \windows: Windows Что мы имеем: 1) Рабочий стол не захломлен, т.к. мы можем удалить ярлыки на программы, а запускать программы будем через диалоговое окно "Выполнить" 2) Можем быстро открывать часто используемые программы. Название сокращений ограничивается вашей фантазией, но желательно сокращать названия ярлыков до 1-3 символов. 3) На чужих компьютерах можем не искать ярлыки Word или Excel, просто набрав winword или excel в окне "Выполнить" 4) Все нечасто используемые ярлыки можем сложить в одну папку, создать на нее ярлык например "ya" и поместить в папку windows 5) На рабочий стол можно складывать текущие рабочие документы, а поработав с ними скопировать в общую папку документов, на которую также можно создать ярлык. Например, "docs"