Ответы на это не единообразны во всей доступной литературе. Так я узнал это.
Слабая сущность требует отношения с другим объектом, чтобы иметь личность. Возьмем заказы и позиции в заказе. Используя только натуральные ключи, идентификатор позиции - номер заказа и номер строки, например, строка порядка 54321. У вас не может быть позиция, которая не является частью заказа, потому что у нее нет идентификатора.
Конечно, вы всегда можете использовать функцию автонабора в СУБД, чтобы назначать кажущуюся идентичность каждой строке, когда она вставлена. Но это не доказывает, что сущность имеет идентичность в реальном мире.
Подкласс не является отдельным объектом, а подмножеством экземпляров в каком-либо другом объекте. Рассмотрим домашних животных, собак и кошек. Могут быть атрибуты, относящиеся к собакам, но не кошки, и наоборот. (есть много подклассов домашних животных, кроме собак и кошек, но я просто держу их просто).
На первом взгляде http://www.nicknettleton.com/zine/php/php-utf-8-cheatsheet я думаю, что одна важная вещь отсутствует (возможно, я пропустил этого). В зависимости от Вашей установки MySQL и/или конфигурации необходимо установить кодирование соединения так, чтобы MySQL знал, какое кодирование Вы ожидаете на стороне клиента (значение стороны клиента Подключения mysql, которое должно быть Вами Сценарий PHP). Можно сделать это путем ручного издания
SET NAMES utf8
запрос до любого другого запроса, который Вы отправляете на сервер MySQL.
, Если Ваш используют PDO на стороне PHP, можно установить соединение для автоматического издания этого запроса на каждом (ре) подключение при помощи
$db=new PDO($dsn, $user, $pass);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
при инициализации соединения дб.
Сопоставление и набор символов не являются тем же самым. Ваше сопоставление должно соответствовать набору символов, поэтому если Ваш набор символов является utf-8, сопоставление - также. Выбор неправильного сопоставления не исказит Ваши данные, хотя - Просто заставляют сравнение строк/сортировку работать неправильно.
Тем не менее существует несколько мест, где можно установить настройки набора символов в PHP. Я рекомендовал бы использовать utf-8 повсюду, если это возможно. Места, которому нужен указанный набор символов:
Content-Type
указывает utf-8. Можно установить значения по умолчанию в PHP и в Apache, или можно использовать PHP's header
функция. accept-charset
свойство. Также удостоверьтесь, что URL является utf-8, закодированным, или избегает использования символов неASCII в URL (И ПОЛУЧИТЕ параметры). utf8_encode
/ декодируют функции, немного странно названы. Они конкретно преобразовывают между latin1 (ISO-8859-1) и utf-8. Если все в Вашем приложении - utf-8, Вы не должны будете использовать их очень.
существует по крайней мере два глюка в отношении utf-8 и PHP. Прежде всего, встроенные строковые функции PHP ожидают, что строки будут однобайтовыми. Для большого количества операций это не имеет значения, но это означает, чем Вы не можете полагаться strlen
и другие функции. Существует хорошее краткое изложение ограничений в [1 110] эта страница . Обычно, это не большая проблема, но особенно при пользовании библиотеками с 3 сторонами, необходимо знать, что вещи могли аварийно завершиться на этом. Одна опция состоит в том, чтобы также использовать mb_string расширение, которое имеет опцию заменить все неприятные функции utf-8 осведомленными альтернативами. Это все еще не 100%-е пуленепробиваемое решение, но это будет работать на большинство случаев.
Другая проблема состоит в том, что некоторые установки PHP все еще имеют magic_quotes
включенная установка. Эта проблема является ортогональной к utf-8, но может привести к некоторому главному царапанию. Выключите его для пользы Вашей собственной исправности.
Не очень, чтобы быть сказанным, который не охвачен этой статьей
Вещи необходимо сделать:
header()
- функция, чтобы сделать это вручную. SET NAMES utf8
добивается цели. Вы обычно не должны делать к большому использованию mb_string
или utf8_encode/decode
- функции, когда Вы делаете это.
Для лучше unicode правильность, необходимо использовать utf8_unicode_ci (хотя документация немного неопределенна на различиях). Необходимо также удостовериться, что следующие флаги Mysql установлены правильно -
, Они могут быть установлены в mysql конфигурационном файле (под [mysqld] вкладкой) или во время выполнения путем отправки соответствующих запросов.
Независимо от языка это записано в, если необходимо было создать приложение, которое позволяет огромное количество кодировки, обработайте его в частях: