Правильная конфигурация для смешивания параметров сортировки в SQL? - PullRequest
0 голосов
/ 03 мая 2020

Меня немного смущают сравнения. Не уверен, что БД передаст сопоставление столбца в сопоставление таблицы на SELECT, или это просто набор правил для сравнения. Так что же ставить как CHARSET и COLLATE? (10.4.11-MariaDB)

Вот несколько примеров того, что у меня есть:
Случай № 1: Столбец utf8_bin Я просто SELECT, не сравниваю, но ascii Я делаю WHERE bot=?

CREATE TABLE `bots_trace` (
  `id` int(10) UNSIGNED NOT NULL,
  `bot` varchar(20) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
  `info` varchar(2000) COLLATE utf8_bin DEFAULT NULL,
  `seen` enum('yes','no') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'no'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Я почти никогда не прошу БД сделать сравнение utf8mb4_bin или подобное, просто SELECT. Итак, какие сопоставления я должен использовать в этих случаях, что использовать как DEFAULT и как COLLATE

Случай № 2: Единственный раз, когда я прошу БД сделать что-то с uft8mb4, это проверить почту .

 CREATE TABLE `changed_email` (
      `id` int(10) UNSIGNED NOT NULL,
      `old_mail` varchar(256) COLLATE utf8mb4_bin NOT NULL,
      `ctime` int(10) UNSIGNED NOT NULL,
      `ip` varchar(94) CHARACTER SET ascii COLLATE ascii_bin NOT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

SELECT id FROM changed_email WHERE old_mail = ? LIMIT 1

Что делать в этом случае? Поскольку единственное сравнение, которое я делаю, это utf8mb4_bin, я предполагаю, что это будет правильным CHARSET & COLLATE.

Кроме того, я использую PHP, и я устанавливаю mysqli_set_charset($link, 'utf8mb4'), который я нужно было правильно извлечь данные, если я изменил таблицу COLLATION на ascii, могут ли у меня возникнуть проблемы с получением utf8mb4 столбцов данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...