Меня немного смущают сравнения. Не уверен, что БД передаст сопоставление столбца в сопоставление таблицы на 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
столбцов данных?