Можно ли использовать Visible=false
и/или ReadOnly=true
вместо Enabled=false
?
при использовании управления Вы не должны действительно устанавливать Enabled=false
?
Использование 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
) освобождает вас от накладных расходов на производительность, связанных с дополнительным запросом, необходимым при каждом подключении.
Из руководства 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;
Из-за необходимости поддержки международных наборов символов я всегда просто устанавливал набор символов для полей текстового типа при создании базы данных.
Я также всегда использовал UTF-8.
В PHP задайте то же самое:
mb_internal_encoding( 'UTF-8' );