send_long_data charset failur

时间:2015-10-01 15:16:32

标签: php mysql database character-encoding

我正在使用德语 Umlauten ,例如aöü

在php和数据库上将carset设置为utf8_general。只有在使用

插入数据时,插入以及选择才能正常工作

$stmt->send_long_data(1,$entry->text);

这些德语字符在数据库中以ü结尾。 如果在没有send_long_data的情况下插入它们,它们将被正确存储。 我也尝试过其他专栏。

它总是一样的: 普通插入 - > Umlaute 存储为äöü。 使用send_long_data - >存储为Ã等等。

我已经红了UTF-8 all the way through,但我找不到答案。

$ret ="";
$null= NULL;
$entry->a_date=convert_date($entry->a_date);
$conn=get_sql_connection();
$stmt = $conn->prepare("SELECT create_entry (?,?,?,?,?)");;
$stmt->bind_param("sbisi",$entry->head,$null,$entry->area,$entry->a_date,$entry->showdate);
$stmt->send_long_data(1,$entry->text);
$stmt->execute();
$stmt->bind_result($col);
$stmt->fetch();
$ret = $col;
finish($stmt);
return $ret;

1 个答案:

答案 0 :(得分:0)

变为乱码

  • 客户端中的字节在utf8(正常)中正确编码。
  • 您可能默认与SET NAMES latin1(或set_charset('latin1')或...)相关联。 (它应该是utf8。)如果您正在使用PDO,请设置PDO dsn的charset属性或通过SET NAMES utf8mb4。
  • 表格中的列可能是CHARACTER SET utf8,也可能不是SELECT col, HEX(col) FROM tbl WHERE ...,但应该是这样。

请提供ü - C3BC应该是FC(utf8编码)的十六进制,而不是C383C2BC(latin1编码),而不是<mailSettings <network host="relay-hosting.secureserver.net" /> </mailSettings> (double -encoding)。