【问题标题】:MySQL and encoding result of strange characterMySQL和奇怪字符的编码结果
【发布时间】:2014-10-26 11:26:52
【问题描述】:

我对 MySQL 和将数据导入特定表之间的关系有疑问。每当请求表单时,所有包含 unicode 字符的数据都会被转换为其他奇怪的字符(问号)。

到目前为止我尝试过的:

  • 设置 MySQL db/table 使用 utf8_croatian_ci
  • 将元数据设置为 HTML 以使用 utf-8 编码
  • 查询SET NAMES 'utf8'
  • 将所有文件设置为通过 UTF-8 编码
  • 查询 mysqli_set_charset()(感谢您注意到 HAL9k)
  • 还添加了:header("Content-type: text/html; charset=utf-8");
  • 尝试编辑 my.iniphp.ini 以将默认字符集设置为 UTF-8

字母转换成DB:

  • č, ć 被翻译成?, ? (HTML & DB)
  • ž 被翻译成 (HTML,在数据库中它是真正的字符 'ž' - 未翻译)

我的元数据:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

代码(伪):

$con = mysqli_connect($host, $db_user, $db_pass, $db_name) or die("Error.");

// Spremanje rekorda preko UTF-8 karaktera
mysqli_query($con, "SET NAMES 'utf8'");  // ovo je bolji način :-)

$selekt = "UPDATE proizvodi SET ..
                            WHERE   slug='...'";

不要因为程序风格而讨厌我。 :-) 干杯,谢谢。请提出建议。

【问题讨论】:

  • 使用mysqli::set_charset() 而不是SET NAMES ...
  • 更改 php 文件的编码,尝试不带 BOM 的 utf8
  • @HAL9000 哎呀,忘了补充说我已经尝试过了。同样的问题。感谢您的通知,我删除了 mysqli_set_charset() 的编码注释。 Aleks:我试过这样但还是不行。 Notepad++ 首选项已解决,以使它们在新文件上无 BOM 的 UTF8。谢谢!
  • 检查 PHP 脚本是否获得好的字符。添加一些反馈,例如:echo htmlspecialchars($_POST["unicode_variable_name"]);
  • 确实如此。我刚刚检查过了。回声结果是真实的字符而不是问号。有什么建议吗?这必须取决于数据库本身,对吧?

标签: php mysql sql encoding utf-8


【解决方案1】:

请在您的数据库/表结构中尝试此操作

utf8_general_ci

如果这不起作用,请查找您当前的字符集,代码如下

if (!mysqli_set_charset($link, "utf8")) { printf("加载字符集 utf8 时出错:%s\n", mysqli_error($link)); } 别的 { printf("当前字符集:%s\n", mysqli_character_set_name($link)); }

【讨论】:

  • 感谢解答,输出为:"Current character set: utf8";所以这一切都取决于 DB 字符集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多