php - 使用 PHP 插入 MySQL 数据库时出现土耳其字符问题

标签 php mysql character-encoding collation

我在插入包含土耳其语字符的字符串时遇到了问题。我正在尝试将“öçşığüÖÇŞİĞÜ”作为字符串插入。

我将下面指示的行放入 php 文件的头部:

header("Content-Type: text/html; charset=windows-1254");

我用ajax获取数据(虽然不重要,我自己写)

$json = filter_input_array(INPUT_POST);

这是插入命令:

$query = "INSERT INTO users (name) VALUES ('" . $user->get_name() . "')";

现在,我尝试了两种给变量赋值的情况:

案例一

  1. php: $name = $json['name'];
  2. 浏览器:öçşığüÖÇÅÄ°Äãœ
  3. 数据库:çşığüÖÇŞİĞãœ

案例 2

  1. php: $name = iconv("UTF-8", "ISO-8859-9", $json['name']);
  2. 浏览器:öçşığüÖÇŞİĞÜ
  3. 数据库: çþýðüÖÇÞÝÐÜ

“1”是我指定的字符串类型,“2”是“echo $user->get_name();”的结果取决于“1”处的分配,“3”是数据库单元格中的值。我可以在 CASE 2 的“echo”中得到真实的结果,但是损坏的结果被插入到数据库中。我的数据库排序规则是:“utf8_turkish_ci”。

(PHP 5.4.17,MySQL 5.6.13)

最佳答案

这个问题听起来好像您没有在某处指定字符编码。要解决这个问题,只需确保您已将字符编码设置为 utf-8 everywere(它实际上不需要是 utf-8,只是相同无处不在 -但是如果你搞砸了一些东西并且无论如何都需要改变一些地方,我强烈建议使用 utf-8):

  • 告诉 MySQL 使用 utf-8。为此,请将其添加到您的 my.cnf 中:

    collation_server = utf8_unicode_ci
    character_set_server = utf8
    
  • 在与 mysql 交互之前,发送这两个查询:

    SET NAMES 'utf8';
    CHARSET 'utf8';
    

    或者,或者,让 php 在打开连接后执行此操作:

    mysql_set_charset('utf8', $conn);
    
  • 将 UTF-8 设置为数据库的默认字符集

    CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
    
  • 对表格做同样的事情:

    CREATE TABLE `my_table` (
      -- ...
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
  • 假设客户端是浏览器,将您的内容作为 utf-8 和正确的 header 提供:

    header('Content-type: text/html; charset=utf-8');
    

    要真正确保浏览器理解,请添加元标记:

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    
  • 最后但同样重要的是,告诉浏览器使用 utf-8 提交表单

    <form accept-charset="utf-8" ...>
    

或在此处检查 smiler 问题。 MYSQL - Turkish character

关于php - 使用 PHP 插入 MySQL 数据库时出现土耳其字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719817/

相关文章:

php 正则表达式错误,未知修饰符 'd'

javascript - 使用托管字段时如何处理现有客户付款方式?

mysql - has_many ,通过 : relationship count

python-3.x - 无法解码作为 URL 参数传递的 "devanagari text"

php - 使用 PHP 和 Ajax 对同一页面上的多个结果进行排序

php - 如何缩小php页面html输出?

mysql - 在 mysql 的同一查询中使用多个语句时是否会减少开销?

php - 如何在数据库中查询特定日期范围

java.io.UnsupportedEncodingException : unicode-1-1-utf-7?

即使 SELECT 数据来自相同的源表和列,MySql 表列也具有不同的 CHARSET 和 COLLATION?