Параметры сортировки MySQL
Я столкнулся с очень странной проблемой при разработке на PHP и MySQL. У меня была такая проблема 4-5 лет назад, но с тех пор ее нет. И действительно не помню, как я ее решил.
Хорошо... проблема: У меня есть база данных с сопоставлением utf_unicode_ci, но при вставке грузинских букв: სახელი და გვარი в базу данных у меня есть რ"áƒáƒ®áƒ"áƒáƒ<- эти символы. В чем может быть проблема? и как ее решить?
Есть идеи?
4 answers
Согласно ответу Эрея, я понял, что utf8_general_ci должен быть установлен в параметрах сортировки, а не utf8_unicode_ci
И в дополнение к этому используйте функцию mysql_set_charset('utf8', $connection).
Вот пример:
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
mysql_set_charset('utf8',$connection);
if (!$connection) {
die("Database connection failed: " . mysql_error());
} else {
$db_select = mysql_select_db(DB_NAME, $connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
}
}
Таким образом, наличие mysql_set_charset во второй строке решило мою проблему.
Надеюсь, это кому-нибудь поможет..
Можете ли вы попробовать utf8_general_ci
вместо этого?
Это решит вашу проблему.
Но не забывай , *databases* and *tables* collation must be utf8_general_ci
.
Убедитесь, что вы используете один из строковых типов с префиксом N (NCHAR, NVARCHAR).
Не забудьте добавить N к параметрам, которые вы передаете в базу данных при добавлении данных. Например:
INSERT INTO table VALUES (N'Georgian Letters', N'Georgian Letters', ...)
Префикс N сообщит sql, что его последующая строка является строкой юникода.
Единственное, в чем я могу вас заверить, так это в том, что проблема, с которой вы столкнулись, не имеет никакого отношения к сопоставлению. Это связано с набором символов и кодировкой, и, скорее всего, проблема заключается не в вставке данных в базу данных, а в том, что когда вы читаете данные и отображаете их, возникает много вопросов о символах юникода в mysql, ПОЭТОМУ выполните поиск, и вы найдете массу советов и информации.