PHP 插入到sql_latin1_general_cp1_ci_as数据库字符集中



我有一个带有sql_latin1_general_cp1_ci_as排序规则的sql数据库。
该数据库将包含大约3种语言(英语,土耳其语,阿拉伯语(。

在主页上,我将字符集设置为 utf-8 为:

header('Content-Type: text/html; charset=UTF-8');
<meta charset="utf-8">

我在我的 php 页面中使用以下代码:

$sql_server = "server";
$sql_user = "user";
$sql_password = "password";
$sql_database = "database";
$sql_conn_string = 'Driver={SQL Server};Server='.$sql_server.';Database='.$sql_database.';';
if ($sql_conn = odbc_connect($sql_conn_string, $sql_user, $sql_password)){
echo 'Connected';
$name = $_POST['cust_name'];
if (odbc_exec($sql_conn,"INSERT INTO inv01 (cust) VALUES (N'".$name."')")){
echo 'is inserted';
}
else{
echo 'is not inserted';
}
odbc_close($sql_conn);
}
else{
echo 'Connection Error';
}

当我输入英语单词时没有问题
,但是当我使用其他语言时,单词入为不清楚的字符

我尝试使用iconv,但它不起作用

$name = iconv("UTF_8","Windows-1252",$name);
//and
$name = iconv("UTF_8","UCS-2LE",$name);

如果不是,sql_latin1_general_cp1_ci_as我最好的排序规则是什么,是否有另一种解决方案而不更改排序规则

我希望我的问题不要重复,因为我在这里读了很多问题,但我没有找到正确的答案。

谢谢。

你可以试试这个:

  • 确保你的"cust"列是nvarchar((。

  • 用 UTF-8 对 html 和 php 文件进行编码(我通常在此步骤中使用 Notepad++(。

  • 转换输入数据。

代码(基于您的示例(:

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta charset="utf-8">
<?php
...
$name = $_POST['cust_name'];
$name = iconv('UTF-8', 'UTF-16LE', $name);
$name = bin2hex($name);
$sql  = "INSERT INTO inv01 (cust) VALUES (CONVERT(nvarchar(MAX), 0x".$value."))";
...
?>
</head>
<body></body>
</html>

相关内容

最新更新