“НАБОР СИМВОЛОВ НАБОРА utf8” необходимый?

Можно ли использовать Visible=false и/или ReadOnly=true вместо Enabled=false?

при использовании управления Вы не должны действительно устанавливать Enabled=false?

30
задан Znarkus 17 June 2010 в 07:54
поделиться

3 ответа

Использование SET CHARACTER SET utf8 после использования SET NAMES utf8 фактически сбрасывает character_set_connection и collation_connection ] на
@@ character_set_database и @@ collation_database соответственно.

В руководстве указано, что

  • SET NAMES x эквивалентно

     ] SET character_set_client = x;
    УСТАНОВИТЬ character_set_results = x;
    УСТАНОВИТЬ character_set_connection = x;
    
  • и SET CHARACTER SET x эквивалентен

     SET character_set_client = x;
    УСТАНОВИТЬ character_set_results = x;
    УСТАНОВИТЬ collation_connection = @@ collation_database;
    

, тогда как SET collation_connection = x также внутренне выполняет SET character_set_connection = <> и SET character_set_connection = x внутренне также выполняет SET collation = << default_collation_of_character_set_x .

По сути, вы сбрасываете character_set_connection на @@ character_set_database и collation_connection в @@ collation_database 119505]. В руководстве объясняется использование этих переменных:

Какой набор символов должен сервер переведите заявление после получать его?

Для этого сервер использует character_set_connection и системные переменные collation_connection. Он преобразует заявления, отправленные клиент от character_set_client к character_set_connection (кроме строковые литералы, имеющие интродуктор, например _latin1 или _utf8). collation_connection важен для сравнения буквальных строк. За сравнения строк со столбцом значения, collation_connection не важно, потому что у столбцов есть свои сопоставление, которое имеет более высокий

  • MySQL создает набор результатов, закодированный в character_set_results (он включает данные результата, а также метаданные результата, такие как имена столбцов и т. Д.)
  • Таким образом, может случиться так, что SET CHARACTER SET utf8 не может обеспечить полную поддержку UTF-8. Подумайте о наборе символов базы данных по умолчанию latin1 и столбцах, определенных с помощью utf8 -charset, и выполните шаги, описанные выше. Поскольку latin1 не может охватывать все символы, которые может охватывать UTF-8, вы можете потерять информацию о символах на этапе 3 .

    • Шаг 3 : Учитывая, что ваш запрос закодирован в UTF-8 и содержит символы, которые не могут быть представлены с помощью latin1 , эти символы будут потеряны при перекодировании из utf8 в latin1 (набор символов базы данных по умолчанию), что приведет к сбою вашего запроса.

    Поэтому я думаю, что можно с уверенностью сказать, что SET ИМЕНА ... - это правильный способ решения проблем с набором символов. Хотя я мог бы добавить, что правильная настройка переменных сервера MySQL (все необходимые переменные могут быть установлены статически в вашем my.cnf ) освобождает вас от накладных расходов на производительность, связанных с дополнительным запросом, необходимым при каждом подключении.

    87
    ответ дан 27 November 2019 в 23:12
    поделиться

    Из руководства mysql :

    SET CHARACTER SET аналогичен SET ИМЕНА, но наборы character_set_connection и collation_connection к character_set_database и collation_database . A УСТАНОВИТЬ ХАРАКТЕР Оператор SET x эквивалентен этим три оператора:

     SET character_set_client = x;
    УСТАНОВИТЬ character_set_results = x;
    УСТАНОВИТЬ collation_connection = @@ collation_database;
    
    2
    ответ дан 27 November 2019 в 23:12
    поделиться

    Из-за необходимости поддержки международных наборов символов я всегда просто устанавливал набор символов для полей текстового типа при создании базы данных.

    Я также всегда использовал UTF-8.

    В PHP задайте то же самое:

    mb_internal_encoding( 'UTF-8' );
    
    0
    ответ дан 27 November 2019 в 23:12
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: