Open chief-j opened 7 years ago
@chief-j Я поправив допис, але не полінуйтесь все ж почитати доку по форматуванню markdown - ліворуч унизу під вікном коментаря посилання (Styling with Markdown is supported), бо посилання було в нікуди...
@yukoff Напевно, моє посилання тільки у мене працювало. Не біда, Майстер і так все розумів
@chief-j Та яка біда - просто зайву ж роботу робите 😉 Для порівняння:
Було (саме так, не знаю, як воно працювало)
[https://github.com/hurtom/toloka/pull/55](url)
Стало:
#55
Взагалі ще принаймні user_sig
- в БД повно дивних DEFAULT '' NOT NULL
чи DEFAULT 0 NOT NULL
@konfuciusu Якщо дата народження не обов'язкова - можна давати ходу (я додам до #74), заодне можна всі поля продивитись на bb_users
(як-от user_sig
)
@yukoff Саме через це, неможливо змінити пароль, тож це виправити треба
Ще сюди ж - при спробі увійти як admin
зловив отаке
Whoops\Exception\ErrorException thrown with message "A non well formed numeric value encountered"
Stacktrace:
#1 Whoops\Exception\ErrorException in /var/www/html/index.php:387
#0 Whoops\Run:handleError in /var/www/html/index.php:387
Я зараз роблю тести міграції зі старого рушія з мінімально заповненими даними bb_users
, на кшталт
INSERT INTO `bb_users`
(`user_id`, `user_active`, `username`, `user_password2`, `user_timer`)
VALUES ...
-- міграція валиться з попередженням Warning: 1265 Data truncated for column '%s' at row 1
принаймні для цих
user_lang
(DEFAULT NULL)user_email
(DEFAULT NULL)Самим тільки виправленням типового значення не обійтись, додатково створив torrentpier/torrentpier#449
@chief-j, Якщо не складно, постав для цього PR також прапорець Allow edits from maintainers
Загалом, я пропоную щонайменше оці зробити DEFAULT NULL
:
user_birthday
(власне, тема цього питання)user_email
(взагалі, логічніше було б як раз NOT NULL
, адже email обов'язковий при реєстрації? але є Guest
- тому або DEFAULT NULL
, або DEFAULT '' NOT NULL
)user_skype
user_twitter
user_icq
user_website
user_from
user_sig
user_occ
user_interests
На InnoDB
в плані розміру це ефективніше за зберігання пустої строки, щоправда доведеться зробити один великий UPDATE
на таблиці - але натомість, це позбавить необхідності робити окремий для кожного стовпця, для порівняння:
UPDATE bb_users
SET user_birthday = IF(STRCMP(user_birthday, '0000-00-00'), user_birthday, NULL),
user_email = IF(STRCMP(user_email, ''), user_email, NULL),
user_skype = IF(STRCMP(user_skype, ''), user_skype, NULL),
...
user_interests = IF(STRCMP(user_interests, ''), user_interests, NULL)
WHERE user_birthday = '0000-00-00'
OR user_email = ''
OR user_skype = ''
...
OR user_interests = '';
Нотатка: тут, вірогідно, навіть
UPDATE
безWHERE
буде швидший
проти: (пам'ятаймо про ~900 тис. рядків)
UPDATE bb_users SET user_birthday = NULL WHERE user_birthday = '0000-00-00';
UPDATE bb_users SET user_email = NULL WHERE user_email = '';
UPDATE bb_users SET user_skype = NULL WHERE user_skype = '';
...
Ще кандидати:
user_actkey
user_newpasswd
autologin_id
Можна ще було б *_ip
теж, але не певен, чи не використовуються вони спільно з анонсером.
@konfuciusu, чи є якісь ідеї чи заперечення?
@yukoff я не проти і великих апдейтів не боюся.
Стандартно записано 0000-00-00, але рушій не сприймає таку дату. Необхідні зміни зробив #55