Невозможно вставить китайский символ в MySQL

Файл 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 и посмотреть набор символов столбцов, которые вы хотите поддерживать китайскими иероглифами.