Spec-Zone .ru
спецификации, руководства, описания, API
|
Несколько наборов символов и системных переменных сопоставления касаются взаимодействия клиента с сервером. Некоторые из них были упомянуты в более ранних разделах:
Набор символов сервера и сопоставление являются значениями character_set_server
и collation_server
системные переменные.
Набор символов и сопоставление базы данных значения по умолчанию являются
значениями character_set_database
и collation_database
системные переменные.
Дополнительный набор символов и системные переменные сопоставления включаются в обработку трафика для соединения между клиентом и сервером. У каждого клиента есть связанный с соединением набор символов и системные переменные сопоставления.
"Соединение" - то, что Вы делаете, когда Вы соединяетесь с сервером. Клиент отправляет SQL-операторы, такие как запросы, по соединению с сервером. Сервер отправляет ответы, такие как наборы результатов или сообщения об ошибках, по соединению назад с клиентом. Это приводит к нескольким вопросам о наборе символов и обработке сопоставления для клиентских соединений, каждому из которых можно ответить с точки зрения системных переменных:
Какой набор символов является оператором в когда это листы клиент?
Сервер берет character_set_client
системная переменная, чтобы быть набором
символов, в котором операторы отправляются клиентом.
В какой набор символов сервер должен преобразовать оператор после получения этого?
Для этого сервер использует character_set_connection
и collation_connection
системные переменные. Это преобразовывает
операторы, отправленные клиентом от character_set_client
к character_set_connection
(за исключением строковых литералов, у
которых есть introducer такой как _latin1
или _utf8
).
collation_connection
важно для сравнений литеральных строк. Для сравнений строк со значениями столбцов, collation_connection
не имеет значения, потому что у столбцов
есть свое собственное сопоставление, у которого есть более высокий приоритет сопоставления.
В какой набор символов сервер должен преобразовать прежде, чем поставить наборы результатов или сообщения об ошибках назад клиенту?
character_set_results
системная переменная указывает на набор символов, в котором сервер возвращает результаты запроса
клиенту. Это включает данные результата, такие как значения столбцов, и метаданные результата, такие
как имена столбцов и сообщения об ошибках.
Клиенты могут подстроить настройки для этих переменных, или зависеть от значений по умолчанию (когда, можно пропустить остальную часть этого раздела). Если Вы не используете значения по умолчанию, следует изменить символьные настройки для каждого соединения с сервером.
Два оператора влияют на связанные с соединением переменные набора символов как на группу:
SET NAMES '
charset_name
' [COLLATE 'collation_name
']
SET NAMES
указывает на то, какой набор символов клиент будет
использовать, чтобы отправить SQL-операторы серверу. Таким образом, SET NAMES
'cp1251'
говорит сервер, "будущие входящие сообщения от этого клиента находятся в наборе символов cp1251
." Это также определяет набор символов,
который сервер должен использовать для того, чтобы отослать результаты назад к клиенту. (Например,
это указывает на то, какой набор символов использовать для значений столбцов, если Вы используете a
SELECT
оператор.)
A SET NAMES '
оператор эквивалентен этим трем операторам: charset_name
'
SET character_set_client =charset_name
;SET character_set_results =charset_name
;SET character_set_connection =charset_name
;
Установка character_set_connection
к charset_name
также неявно наборы collation_connection
к сопоставлению значения по умолчанию для charset_name
. Является ненужным установить то
сопоставление явно. Чтобы определить определенное сопоставление, используйте дополнительное COLLATE
пункт:
SET NAMES 'charset_name
' COLLATE 'collation_name
'
SET CHARACTER SET
charset_name
SET CHARACTER SET
подобно SET NAMES
но
наборы character_set_connection
и collation_connection
к character_set_database
и collation_database
. A SET CHARACTER SET
оператор эквивалентен этим трем
операторам: charset_name
SET character_set_client =charset_name
;SET character_set_results =charset_name
;SET collation_connection = @@collation_database;
Установка collation_connection
также неявно наборы character_set_connection
к набору символов, связанному с
сопоставлением (эквивалентный выполнению SET character_set_connection =
@@character_set_database
). Является ненужным установить character_set_connection
явно.
ucs2
, utf16
, utf16le
, и utf32
не может использоваться в качестве
клиентского набора символов, что означает, что они не работают на SET NAMES
или
SET CHARACTER SET
.
Клиентские программы MySQL mysql
, mysqladmin
, mysqlcheck
, mysqlimport
, и mysqlshow
определите набор символов значения по умолчанию, чтобы использовать следующим образом:
В отсутствие другой информации программы используют скомпилированный - в наборе
символов значения по умолчанию, обычно latin1
.
Программы могут автоматически обнаружить который набор символов использовать
основанный на установке операционной системы, такой как значение LANG
или
LC_ALL
переменная окружения локали на системах Unix или установка кодовой
страницы на системах Windows. Для систем, на которых локаль доступна от ОС, клиент использует это, чтобы
установить набор символов значения по умолчанию вместо того, чтобы использовать скомпилированный - в
значении по умолчанию. Например, установка LANG
к ru_RU.KOI8-R
причины koi8r
набор символов, который будет использоваться. Таким образом
пользователи могут сконфигурировать локаль в своей среде для использования клиентами MySQL.
Набор символов ОС отображается на самый близкий набор символов MySQL, если нет никакого точного
совпадения. Если клиент не поддерживает соответствующий набор символов, он использует
скомпилированный - в значении по умолчанию. Например, ucs2
не
поддерживается как набор символов соединения.
C приложения может использовать автоматическое обнаружение набора символов, основанное на установке
ОС, вызывая mysql_options()
следующим образом прежде, чем соединиться с сервером:
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, MYSQL_AUTODETECT_CHARSET_NAME);
Программы поддерживают a --default-character-set
опция, которая позволяет пользователям определить
набор символов явно, чтобы переопределить безотносительно, принимает значение по умолчанию, клиент иначе
определяет.
Когда клиент соединяется с сервером, он отправляет имя набора символов, который он хочет использовать. Сервер
использует имя к установленному character_set_client
, character_set_results
, и character_set_connection
системные переменные. В действительности сервер
выполняет a SET NAMES
работа используя имя набора символов.
С mysql клиентом, чтобы использовать набор символов, отличающийся
от значения по умолчанию, Вы могли явно выполниться SET NAMES
каждый раз Вы
запускаете. Чтобы выполнить тот же самый результат более легко, добавьте --default-character-set
установка опции в Вашу mysql командную строку или в Вашем файле опции. Например,
следующая установка файла опции изменяет три связанных с соединением набора переменных набора символов на koi8r
каждый раз Вы вызываете mysql:
[mysql]default-character-set=koi8r
Если Вы используете mysql клиент с, % автоповторно соединяются, включал (который не
рекомендуется), предпочтительно использовать charset
команда, а не SET NAMES
. Например:
mysql> charset
utf8
Charset changed
charset
проблемы a команды SET NAMES
оператор, и также
изменяет набор символов значения по умолчанию, который использует mysql, когда это повторно соединяется после того, как
соединение отбросило.
Пример: Предположите это column1
определяется как CHAR(5)
CHARACTER SET latin2
. Если Вы не говорите SET NAMES
или SET CHARACTER SET
, тогда для SELECT column1 FROM t
,
сервер отсылает все значения назад для column1
использование набора символов,
который определил клиент, когда он соединялся. С другой стороны, если Вы говорите SET
NAMES 'latin1'
или SET CHARACTER SET latin1
прежде, чем выйти SELECT
оператор, сервер преобразовывает latin2
значения к latin1
прежде, чем отослать результаты назад. Преобразование может быть
с потерями, если есть символы, которые не находятся в обоих наборах символов.
Если Вы хотите, чтобы сервер не выполнил преобразования наборов результатов или сообщений об ошибках, установить
character_set_results
к NULL
или binary
:
SET character_set_results = NULL;
Чтобы видеть значения набора символов и системных переменных сопоставления, которые применяются к Вашему соединению, используйте эти операторы:
SHOW VARIABLES LIKE 'character_set%';SHOW VARIABLES LIKE 'collation%';
Следует также рассмотреть среду, в пределах которой выполняются Ваши приложения MySQL. См. Раздел 10.1.5, "Конфигурируя Набор символов и Сопоставление для Приложений".
Для получения дополнительной информации о наборах символов и сообщениях об ошибках, см. Раздел 10.1.6, "Набор символов для сообщений об ошибках".