【问题标题】:How to insert ö/ä/ü in Database using php utf8如何使用 php utf8 在数据库中插入 ö/ä/ü
【发布时间】:2015-03-30 07:29:57
【问题描述】:

我知道,它被问了十几次,但我唯一想要的就是使用 php 脚本将一个像“Ä”这样的德语字母插入数据库中,这在现有解决方案中根本不起作用。

<?php
header('Content-type: text/html; charset=utf-8'); 
$con = mysqli_connect("localhost", "username", "password");

mysqli_set_charset($con, "utf8mb4");
mysqli_select_db($con, "database");
mysqli_query($con, "SET SESSION CHARACTER_SET_RESULTS =utf8mb4;");
mysqli_query($con, "SET SESSION CHARACTER_SET_CLIENT =utf8mb4;");
mysqli_query($con, "SET NAMES 'utf8mb4';");

mysqli_query($con,
"SET character_set_results = 'utf8',
character_set_client = 'utf8',
character_set_connection = 'utf8',
character_set_database = 'utf8',
character_set_server = 'utf8';");

$title = 'Ö';
$result = mysqli_query($con, 
"INSERT INTO Test (Title)
VALUES ('" . utf8_encode($title) . "');");
#Doesn't work, this was inserted: Ã
?>

“标题”列的字符集设置为 utf8mb4_general_ci,表本身的字符集设置为 utf8_general_ci。 MySQL 服务器版本为 5.5.31 MySQL 字符集是 UTF-8 Unicode

有人知道我做错了什么还是我在这里遗漏了什么?

【问题讨论】:

  • mysqli_query($con, "SET SESSION CHARACTER_SET_RESULTS =latin1;"); mysqli_query($con, "SET SESSION CHARACTER_SET_CLIENT =latin1;"); 应该是 utf8mb4 而不是 latin1。
  • 确保您的数据来源是提交 UTF8。如果您没有指定您的网页是 UTF8,它可能会以类似 Windows-1252 的形式提交
  • 检查phpMyAdmin你的表格设置,可能你需要为表格切换字符集
  • 感谢您的快速回答,我检查了表格字符集,它设置为 utf8_general_ci。我不知道如何确保我提交的数据的来源是 UTF8,但我添加了设置为 utf-8 的标头字符集。而且我还将 latin1 更改为 uft8mb4。但问题是它仍然不起作用。还有其他想法吗?
  • 如果去掉 utf8_encode?​​span>

标签: php mysql sql database utf-8


【解决方案1】:

正如Mihai 所说,我必须删除 utf8_encode() 函数,这会弄乱字符集。取下它后,它可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2015-05-04
    • 2016-02-11
    • 2012-06-28
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多