Файл cookie кодируется с использованием набора big5 и не может вставляться в MySQL. Не могли бы вы помочь мне решить эту проблему?
Поля: username
is eng, date1
– дата, reason1
– китайский символ.
$reason1 = $_COOKIE["reason"]; $sql2="INSERT INTO attendance_count(username,date,count_time,appendix) VALUES ('$username','$date1','0','$reason1')"; mysql_query($sql2);
Используйте UTF-8 при создании таблицы.
create table table_name () CHARACTER SET = utf8;
Используйте UTF-8 при вставке в таблицу
set username utf8; INSERT INTO table_name (ABC,VAL);
Прочитайте больше
И более
Детальный код
Ниже кода проверен код, пожалуйста, выполните следующие действия.
Если вы уже создали базу данных, используйте ALTER, как показано ниже. И если вы не создали базу данных, тогда создайте ее и установите Collation в utf8_unicode_ci
То же самое для таблицы определяют Collation как «utf8_unicode_ci» для полей таблицы, в которых вы хотите хранить символы chines.
ALTER DATABASE `stackoverflow` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; CREATE TABLE `stackoverflow`.`chines` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `words` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ) ENGINE = InnoDB;
<?php define('HOSTNAME', 'localhost'); define('USERNAME', 'root'); define('PASSWORD', ''); define('DATABASE', 'stackoverflow'); $dbLink = mysql_connect(HOSTNAME, USERNAME, PASSWORD)or die(mysql_error()); mysql_query("SET character_set_results=utf8", $dbLink)or die(mysql_error()); mb_language('uni'); mb_internal_encoding('UTF-8'); mysql_select_db(DATABASE, $dbLink)or die(mysql_error()); mysql_query("set names 'utf8'",$dbLink)or die(mysql_error()); if(isset($_POST['addWord'])) { mysql_query("SET character_set_client=utf8", $dbLink)or die(mysql_error()); mysql_query("SET character_set_connection=utf8", $dbLink)or die(mysql_error()); $sql_query = "INSERT INTO chines(words) VALUES('".$_POST['words']."')"; mysql_query($sql_query, $dbLink)or die(mysql_error()); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title></title> </head> <body> <?php mysql_query("SET character_set_results=utf8", $dbLink); $sql_query = "SELECT * FROM chines"; $dbResult = mysql_query( $sql_query, $dbLink)or die(mysql_error()); ?> <form action="" method="post"> <p>Word : <input type="text" name="words" /></p> <p><input type="submit" name="addWord" /></p> </form> <?php while($row = mysql_fetch_assoc($dbResult)) { echo $row['words']. '<br />'; } ?> </body> </html>
См. Результат и шаг, как показано ниже.
Для китайцев вам действительно нужен utf8mb4
, а не utf8
. Это связано с небольшим количеством китайских символов, которым требуются 4-байтовые символы UTF8, которые MySQL utf8
не поддерживает.
Реальная проблема в том, что cookie кодируется big5
? Остальные данные в клиенте закодированы как utf8
? Если «да» для обоих, …
Измените соединение как big5
, сделайте INSERT
/ SELECT
файла cookie, затем вернитесь к utf8 (или, лучше, utf8mb4 после обновления).
Выполнение SET NAMES big5
или вызов функции charset('big5')
для используемого вами API – это предпочтительный способ переключения взад и вперед.
(Между тем, уйти от интерфейса mysql_*
, переключиться на mysqli_*
или PDO
.)
Если все в клиенте big5
, тогда нет необходимости переключаться туда и обратно. Просто объявляйте, что клиент использует big5. Примечание: не имеет значения, является ли таблица / столбец также большой5; MySQL будет конвертировать между ними.
обновить набор символов столбцов таблицы, а также с помощью utf8 вместе с табличным набором символов. Может быть проверена в таблице изменений workbench Mysql и посмотреть набор символов столбцов, которые вы хотите поддерживать китайскими иероглифами.