ColdFusion-将阿拉伯语/波斯语字符插入mysql

ColdFusion-将阿拉伯语/波斯语字符插入mysql,mysql,coldfusion,coldfusion-10,Mysql,Coldfusion,Coldfusion 10,我使用以下代码将数据插入mysql数据库: <cfprocessingdirective pageEncoding="utf-8"> <cfset setEncoding("URL", "utf-8")> <cfset setEncoding("Form", "utf-8")> <cfcontent type="text/html; charset=utf-8"> <!DOCTYPE html> <head>

我使用以下代码将数据插入mysql数据库:

<cfprocessingdirective pageEncoding="utf-8">     
<cfset setEncoding("URL", "utf-8")>
<cfset setEncoding("Form", "utf-8")> 
<cfcontent type="text/html; charset=utf-8">

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body> 

<cfparam name="postTextBox" default="" type="String">

<cfoutput>
    <form action="index.cfm" method="POST" name="form">
        <input name="postTextBox" type="text"/>
        <input name="" type="submit" value="Submit" />
    </form>
</cfoutput> 

<cfquery name="myQuery" datasource="hello">
    insert into ad (name)  
    values(N<cfqueryparam value=#postTextBox# cfsqltype="cf_sql_varchar">)
</cfquery>

</body> 
</html>

插入广告(名称)
数值(N)
问题是当我插入存储在数据库中的阿拉伯语或波斯语字符时,比如“???????”但英语字符没有问题。 我使用ColdFusion 10和mysql

问候(来自评论…)

检查或表格。确保它支持unicode字符。例如,UTF-8:

CREATE TABLE ( name varchar(500) CHARSET UTF8, ....)
此外,您还可以使用新的cfsqltype
cf\u sql\u nvarchar
来代替语法。有了这些变化,它应该可以正常工作

    INSERT INTO ad ( name )  
    VALUES 
    (
       <!--- always scope variables ---> 
       <cfqueryparam value="#FORM.postTextBox#" cfsqltype="cf_sql_nvarchar">
    )
插入广告(名称)
价值观
(
)
旁注-与您的问题无关,但
cfprocessingdirective
在此处无效。当您需要在CF脚本中嵌入Unicode字符或硬编码时,可以使用它。既然你没有这样做,你就不需要它

用“?”标记代替阿拉伯字符的问题可能是两个问题;假设您使用的是MySQL 5和ColdFusion 10或11:

第一个问题:可能是您尚未将MySQL数据库设置为UTF-8,为了将所有数据库转换为UTF-8,请在MySQL上使用以下命令:

使用
alterdatabase
altertable
命令

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
第二个问题:ColdFusion数据源未正确设置,需要使用ColdFusion
数据源
选项添加另外两个字符串

转到ColdFusion管理员,打开
数据源
页面,单击已设置的数据源

Data&Services>Datasources>MySQL 5

单击
数据源名称
并单击
显示高级设置
,在
连接字符串
上添加以下两个值

useUnicode=true&characterEncoding=utf8
保存配置详细信息后,ColdFusion将开始将数据转换为
UTF-8
charachter集合,您将拥有正确的阿拉伯语或波斯语字符

注意:如果您与一些托管服务提供商(如我的托管公司)进行托管,您必须从托管支持团队请求将其添加到数据库的数据源中,我相信大多数托管公司在将其添加到您的数据库中时不会有任何问题。还请注意,他们可能有一个负载平衡环境,在这种情况下,有时您可能会得到“??”字符,有时是正确的“阿拉伯语”字符,在这种情况下,请确保他们将上述字符串添加到H/a环境中的所有CF服务器上(即,这发生在我身上)


希望这有助于解决问题。

检查
名称
。确保它支持阿拉伯语和波斯语,例如-ie
createtable(名称varchar(500)charsetutf8,…)
。另外,尝试使用
`而不是
N
和cf\u sql\u varchar.@Leigh谢谢。太好了,不客气。顺便说一句,我不知道这是否只是一个测试脚本,但。。。通常您不会在此处使用
cfparam
。相反,您可以使用
structKeyExists
来测试表单是否已提交。如果是,请运行插入。这样,就不会在每次加载页面时插入空值。ie
do insert
是的,我知道,那是一个简单的测试脚本。