我使用以下代码将数据插入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。
此致
答案 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 DATABASE
和ALTER 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服务器上(即发生在我身上)。
希望这有助于解决问题。