我正在尝试将以下字符串写入数据库:
打印时扬声器格栅波纹效果。
'é'字符让我头疼不已。我无法使用htmlentities
,因为数据库是桌面应用程序的一部分。我的HTML是UTF-8。
在我(5天计数)尝试调试此问题期间,我使用桌面应用程序将相同的字符串插入到数据库中,这似乎工作正常,但是有问题的字符显示为“?” - 甚至使用htmlentities
或utf8_encode
。
这些是我在尝试插入字符串时收到的错误消息:
警告:PDOStatement :: execute()[pdostatement.execute]:message:字符串'speaker grille moir'前面的未闭合引号。 (严重程度15)
警告:PDOStatement :: execute()[pdostatement.execute]:常规SQL Server错误:检查来自SQL Server的消息(严重级15)
警告:PDOStatement :: execute()[pdostatement.execute]:消息:第1行:'speaker grille moir'附近的语法不正确。 (严重程度15)
请帮忙!
更新(2011-01-18)
显然,数据库字符编码为SQL_Latin1_General_CP1_CI_AS
。这是SQL Server等同于ISO-8859-1吗?是不是ISO-8859-1 PHP的默认字符编码?
更新2 (2011-01-18)
如此接近!在DSN字符串中包含charset=UTF-8
,允许我插入“é”字符,并在桌面应用程序中正确显示。它仍然显示为'?'但是在网页中,即使我在预格式化功能中使用$text_block = htmlentities( $text_block, ENT_NOQUOTES, 'UTF-8' );
。
答案 0 :(得分:1)
确保使用PDO绑定正确传递动态字符串,以便正确转义。
还要确保您的数据库连接也是UTF-8字符集。
您在数据库/字段中的集合也应设置为UTF-8,但如果不是这样,则可能不会导致此类错误。
答案 1 :(得分:0)
您是否尝试在数据库中使用具有重音敏感排序规则的NVARCHAR数据类型? 在您的数据库中执行以下测试并告诉我们它是否有效:
- 打印时扬声器格栅波纹效果。 如果object_id('tempdb.dbo。#test')不为null drop table #test create TABLE #test(test NVARCHAR(1000)collate Latin1_General_CI_AS)
插入#test(测试) 选择'打印时的扬声器格栅莫尔效果'。
选择* 来自#test