Использование различных конфигов набора символов для MySQL - PullRequest
0 голосов
/ 20 февраля 2019

Я запустил

SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; и вывод

+--------------------------+-------------------+
| Variable_name            | Value             |
+--------------------------+-------------------+
| character_set_client     | utf8              |
| character_set_connection | utf8              |
| character_set_database   | latin1            |
| character_set_filesystem | binary            |
| character_set_results    | utf8              |
| character_set_server     | latin1            |
| character_set_system     | utf8              |
| collation_connection     | utf8_general_ci   |
| collation_database       | latin1_swedish_ci |
| collation_server         | latin1_swedish_ci |
+--------------------------+-------------------+

Может кто-нибудь объяснить, пожалуйста, точное использование этих настроек?Мое понимание следующее:

  1. character_set_client: сообщает кодировку, используемую клиентом для кодирования запроса
  2. character_set_connection: кодировка, используемая сервером для преобразования запроса в
  3. character_set_database: encodingиспользуется для хранения данных в таблицах
  4. character_set_server: кодировка по умолчанию, если не указано character_set_connection
  5. character_set_results: результаты кодируются в этом формате и возвращаются.

Почему существуюттак много конфигов требуется?Не могли ли клиент и сервер сохранить одинаковые настройки всегда?

Я пытаюсь выполнить запрос на вставку, который завершается неудачно из-за присутствия 'в строке.Рекомендуется экранировать или кодировать запрос?Кроме того, как я могу закодировать это в Голанге?

1 Ответ

0 голосов
/ 05 марта 2019

Да, вы должны избегать любых строк, отправляемых в MySQL.В частности, по крайней мере, ', " и \ должны быть экранированы.В противном случае, как вы думаете, произойдет ли при вставке в таблицу имя O'Brian таким образом?любой желаемый CHARACTER SET.
Таблица может иметь любой желаемый по умолчанию CHARACTER SET.
База данных может иметь любой желаемый по умолчанию CHARACTER SET.Примечание. Этот параметр бесполезен, если вы явно указали CREATEing столбцы или таблицы.
Сервер может иметь любой желаемый по умолчанию CHARACTER SET.Примечание. Этот параметр бесполезен, если вы явно указали CREATEing базы данных / таблицы / столбцы.

Между тем, клиент может иметь любую другую CHARACTER SET.Но способ сообщить серверу, какую кодировку имеет клиент, - это 3 из этих настроек (клиент / соединение / результаты).Можно установить массово через

SET NAMES utf8mb4;

Однако, обычно «лучше» установить кодировку клиента с помощью какого-либо параметра во время процесса соединения.(Синтаксис для такого варьируется от клиента к клиенту - Java / PHP / VB / и т. Д.)

Почему так много?Это, вероятно, слишком много.Практически все практические случаи обрабатываются путем изменения этого трио настроек;между тем, другие настройки можно игнорировать.

Еще одна вещь: хранимые подпрограммы имеют набор символов и параметры сортировки, и я думаю, что это происходит из настроек базы данных.

...