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

时间:2014-09-16 17:45:02

标签: 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>
<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>

问题在于我插入了阿拉伯语或波斯语字符,这些字符存储在数据库中,例如&#34; ?????&#34;但英文字符没有问题。 我使用ColdFusion 10和mysql。

此致

2 个答案:

答案 0 :(得分:4)

(来自评论......)

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

CREATE TABLE ( name varchar(500) CHARSET UTF8, ....)

此外,您也可以使用新的cfsqltype cf_sql_nvarchar,而不是使用N'literal'语法。有了这些变化,它应该可以正常工作。

    INSERT INTO ad ( name )  
    VALUES 
    (
       <!--- always scope variables ---> 
       <cfqueryparam value="#FORM.postTextBox#" cfsqltype="cf_sql_nvarchar">
    )

附注 - 与您的问题无关,但cfprocessingdirective在此处无效。当您需要在CF脚本中嵌入或硬编码Unicode字符时使用它。既然你没有这样做,你就不需要它了。

答案 1 :(得分:0)

有“????”的问题标记而不是阿拉伯字符可能是两个问题;假设您正在使用MySQL 5,使用ColdFusion 10或11:

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

使用ALTER DATABASEALTER TABLE命令。

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

第二期: ColdFusion DataSource尚未正确设置,需要使用ColdFusion Data Source选项添加两个额外的字符串。

转到ColdFusion管理员,打开Data Source页面,然后单击您已设置的数据源。

Data & Services > Datasources > MySQL 5

点击Data Source Name并点击Show Advanced Settings,在Connection String字段上添加以下两个刺激值。

useUnicode=true&characterEncoding=utf8

保存配置详细信息后,ColdFusion将开始将数据转换为UTF-8 charachter集,并且您将拥有正确的阿拉伯语或波斯语字符。

注意:如果您托管某些托管服务提供商,例如我的托管公司,您必须要求将此文件从托管支持小组添加到您的数据库的数据源,我相信大多数托管公司都没有将它们添加到您的问题。另请注意,它们可能具有负载平衡环境,在这种情况下,您可能有时会得到“????”有时候正确的'阿拉伯'字符,在这种情况下确保他们将上述字符串添加到H / A环境中的所有CF服务器上(即发生在我身上)。

希望这有助于解决问题。