Ультимативный способ использования UTF-8 в MySQL - PullRequest
1 голос
/ 05 января 2012

Я прочитал много статей, дискуссий и учебных пособий по использованию кодировки utf-8 в mysql.Несколько подходов введены, по-видимому, для разных случаев (например, переход на utf-8).Каковы необходимые аппроксимации для создания и использования базы данных utf-8 mysql?Известные мне методы:

  1. Использование CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci при создании баз данных.
  2. Использование DEFAULT CHARSET=utf8 COLLATE utf8_general_ci при создании таблицы.
  3. Использование mysql_set_charset('utf8',$con); послекаждое соединение mysql.
  4. Установка соединения mysql по умолчанию в my.conf как default-character-set = utf8, collation-server = utf8_unicode_ci, init-connect='SET NAMES utf8', character-set-server = utf8

Все эти действия необходимы дляработать с базой данных mysql с кодировкой utf-8?Если нет, то какой путь (и) лучше?

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Каждый набор символов Unicode и описание их дифференцирующих свойств. Наиболее специальным является utf8_bin, который предназначен для сравнения символов в двоичном формате.

utf8_general_ci несколько быстрее, чем utf8_unicode_ci, но менее точен (для сортировки).Конкретная кодировка языка utf8 (например, utf8_swedish_ci) содержит дополнительные языковые правила, которые делают их наиболее точными для сортировки для этих языков.Большую часть времени я использую utf8_unicode_ci (я предпочитаю точность небольшим улучшениям производительности), если только у меня нет веских оснований отдавать предпочтение конкретному языку.

Подробнее о конкретных наборах символов Юникода можно прочитать в руководстве по MySQL.- Наборы символов Unicode

1 голос
/ 10 января 2012

Когда вы указываете кодировку , например utf8 для столбца, это означает, что MySQL будет использовать эту кодировку для хранения текста. Когда вы указываете кодировку символов по умолчанию для базы данных или таблицы, это означает, что их столбцы будут иметь эту кодировку, если вы не скажете иначе. Это влияет на число байтов , которые данные будут занимать на диске: в латинице 1 это 1 байт на символ, в sjis 2 байта, в utf8 оно меняется. Если вы храните много текста на японском языке, вы можете использовать sjis вместо utf8.

Когда вы указываете параметры сортировки , такие как utf8_general_ci для столбца, это означает, что MySQL будет сортировать данных по-разному в ORDER BY или индексах. В культурах есть разные правила сортировки текста: например, в шведском Ä это вторая по последнему буквенная буква алфавита, в то время как в английском это эквивалентно A. Таким образом, при шведском сопоставлении вы получаете И все же то, что делает сервер MySQL, не влияет на то, как клиент MySQL возвращает текст: каждое соединение имеет свою собственную клиентскую кодировку . Клиент автоматически преобразует результаты в кодировку соединения, поэтому вам не нужно заботиться о том, что делает сервер. Фактически вы можете сделать выборку со столбцами в разных кодировках, и клиент MySQL правильно преобразует все в utf8 или что-то еще.

Так что вам действительно нужно беспокоиться о настройке кодировки соединения, что и делает ваш # 3. Вероятно, SET NAMES в # 4 также работает, но я бы на это не полагался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...