Caused by: java.sql.SQLException: Incorrect string value: '\xE6\xAF\x94FOX...' for column 'parameter_value' at row 4 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4190)
Нескучные вопросы для IT-собседования
Posted in Fun.
rev="post-1533" 3 коментарі
– 02.06.2014
Создание swap-файла в файле :)
Уж простите за тавтологию, но иногда создавать новый дисковый раздел под раздел подкачки (swap) не представляется возможным. В таких случаях можно создать его в виде файла в файловой системе. Для примера рассмотрим создание дополнительного swap-файла размером 8ГБ:
# dd if=/dev/zero of=/swapfile bs=1M count=8192 8192+0 records in 8192+0 records out 8589934592 bytes (8,6 GB) copied, 13,2861 s, 647 MB/s # ls -l /swapfile -rw-r--r--. 1 root root 8589934592 Май 12 11:13 /swapfile # mkswap /swapfile mkswap: /swapfile: warning: dont erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 8388604 KiB no label, UUID=278eca1b-2af8-4e42-be11-5025ba0f3d8d
Обратите внимание на размер свободного swap-а после первой и второй команд free:
# free; swapon /swapfile ; free total used free shared buffers cached Mem: 32867736 30405392 2462344 0 153196 8790844 -/+ buffers/cache: 21461352 11406384 Swap: 8388600 7596 8381004 total used free shared buffers cached Mem: 32867736 30411360 2456376 0 153196 8790844 -/+ buffers/cache: 21467320 11400416 Swap: 16777200 7596 16769604 # echo '/swapfile none swap sw 0 0' >> /etc/fstab
Posted in *nix.
rev="post-1528" 1 comment
– 12.05.2014
MySQL 5.6 и sql_mode
После переезда с версии MySQL 5.5.13 на 5.6.10 стали вылезать странные грабли.
Симптом №1:
Симптом №2:
Data truncation: Data too long for column 'channel' at row 1 org.hibernate.exception.DataException: could not execute native bulk manipulation query
Так как "раньше всё работало" и в код приложения никто изменений не вносил, закралось подозрение, что новый mysql работает в каком-то более строгом режиме. Гугление вывело на глобальную переменную sql_mode.
mysql> show global variables like 'sql_mode'; +--------------------------+--------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +--------------------------+--------------------------------------------+
Читаем официальное руководство и видим:
STRICT_TRANS_TABLES
If a value could not be inserted as given into a transactional table, abort the statement. For a nontransactional table, abort the statement if the value occurs in a single-row statement or the first row of a multiple-row statement.
На основе этой инфы приходит в голову мысль, что надо этот режим STRICT_TRANS_TABLES попробовать отключить:
mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; mysql> show global variables like 'sql_mode'; +---------------+------------------------+ | Variable_name | Value | +---------------+------------------------+ | sql_mode | NO_ENGINE_SUBSTITUTION | +---------------+------------------------+
И таки да, после этого запросы, ранее выполнявшиеся с ошибками, стали отрабатывать нормально, как и было на версии 5.5.13. Чтобы сохранить изменения навсегда, в /etc/my.cnf я добавил в секции [mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION"
Однако далее меня ждала еще одна засада – после рестарта mysql-сервера я опять увидел знакомую картину, несмотря на внесенные в /etc/my.cnf изменения:
mysql> show global variables like 'sql_mode'; +--------------------------+--------------------------------------------+ | Variable_name | Value | +--------------------------+--------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +--------------------------+--------------------------------------------+
Это было непостижимо и удивительно. Я уже и еще раз проверил hostname у сервера, дабы убедиться, что всё ранее сделанное происходило именно на том сервере, где и должно было происходить. Почесав пару минут репу, решил проверить наличие других конфигов mysql-сервера в системе. И таки нашёл один такой в /usr/my.cnf:
$ cat /usr/my.cnf | grep -vE "^#" | sed -r "/^$/ d" sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
Вот он, вражеский конфиг, который переопределял моё значение sql_mode! Что самое прикольное, больше ничего в этом конфиге не было. Как будто его специально всунули, чтобы добавить мне головняка. После удаления файла /usr/my.cnf и рестарта mysql-сервера я уже раз и навсегда получил возможность наслаждаться значением sql_mode без STRICT_TRANS_TABLES.
Posted in Howto.
rev="post-1522" 3 коментарі
– 29.04.2014
О нестандартном мышлении
Ответ студента был таким: «Нужно подняться с барометром на крышу здания, спустить барометр вниз на длинной верёвке, а затем втянуть его обратно и измерить длину верёвки, которая и покажет точную высоту здания».
Случай был и впрямь сложный, так как ответ был абсолютно полным и верным! С другой стороны, экзамен был по физике, а ответ имел мало общего с применением знаний в этой области. Резерфорд предложил студенту попытаться ответить ещё раз. Дав ему шесть минут на подготовку, он предупредил его, что ответ должен демонстрировать знание физических законов. По истечении пяти минут студент так и не написал ничего в экзаменационном листе. Резерфорд спросил его, сдаётся ли он, но тот заявил, что у него есть несколько решений проблемы, и он просто выбирает лучшее.
Заинтересовавшись, Резерфорд попросил молодого человека приступить к ответу, не дожидаясь истечения отведённого срока. Новый ответ на вопрос гласил: «Поднимитесь с барометром на крышу и бросьте его вниз, замеряя время падения. Затем, используя формулу, вычислите высоту здания».
Тут Резерфорд спросил своего коллегу преподавателя, доволен ли он этим ответом. Тот, наконец, сдался, признав ответ удовлетворительным. Однако студент упоминал, что знает несколько ответов, и его попросили открыть их.
— Есть несколько способов измерить высоту здания с помощью барометра, — начал студент. — Например, можно выйти на улицу в солнечный день и измерить высоту барометра и его тени, а также измерить длину тени здания. Затем, решив несложную пропорцию, определить высоту самого здания.
— Неплохо, — сказал Резерфорд. — Есть и другие способы?
— Да. Есть очень простой способ, который, уверен, вам понравится. Вы берёте барометр в руки и поднимаетесь по лестнице, прикладывая барометр к стене и делая отметки. Сосчитав количество этих отметок и умножив его на размер барометра, вы получите высоту здания. Вполне очевидный метод.
— Если вы хотите более сложный способ, — продолжал он, — то привяжите к барометру шнурок и, раскачивая его, как маятник, определите величину гравитации у основания здания и на его крыше. Из разницы между этими величинами, в принципе, можно вычислить высоту здания. В этом же случае, привязав к барометру шнурок, вы можете подняться с вашим маятником на крышу и, раскачивая его, вычислить высоту здания по периоду прецессии.
— Наконец, — заключил он, — среди множества прочих способов решения данной проблемы лучшим, пожалуй, является такой: возьмите барометр с собой, найдите управляющего и скажите ему: «Господин управляющий, у меня есть замечательный барометр. Он ваш, если вы скажете мне высоту этого здания».
Тут Резерфорд спросил студента, неужели он действительно не знал общепринятого решения этой задачи. Он признался, что знал, но сказал при этом, что сыт по горло школой и колледжем, где учителя навязывают ученикам свой способ мышления, который не всегда приемлет нестандартных решений.
Студента звали Нильс Бор (1885–1962), датский физик, лауреат Нобелевской премии 1922 г.
Posted in Fun.
rev="post-1520" 1 comment
– 22.04.2014