php - php INSERT 到 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>
推荐阅读
- java - java中的org/codehaus/groovy/control/CompilationFailedException
- sql-server - SQL Server 还原分离数据库
- django - ModuleNotFoundError:没有名为“drf_multiple_model”的模块
- javascript - 电子邮件地址正则表达式验证
- python - 如何检查列表的子子列表是否包含一项,如果是,则将其删除?
- jenkins - 有没有办法查看詹金斯插件更新历史?
- javascript - 在 JSX 文件中导入 css
- r - 使用 frame 参数从 ggplot 到 plotly
- macos - 如何确定我的单声道应用程序是否在 Mac 环境中运行?
- python - django-q 任务队列:失败的任务会一直处理下去