从PHP向SQL Server插入丹麦字符

7

当将丹麦字符插入到具有nvarchar数据类型的字段中时,丹麦字符会变形。例如:brændstof被转换为brÃndstof。在直接从SQL Server查询窗口时,它正常工作。我尝试为该字段提供不同的排序规则(Latin1_Genaral、Danish_Greenlandic_100_CI_AI、Danish_Norwegian_CI_AI等)。是否有一种方法可以实现这一点。我正在使用Microsoft Drivers 3.0 for PHP for SQL Server。请帮忙。


3
这似乎是一个常见的UTF8 / Unicode问题。我只使用MySQL自己,但我确信您也可以在MySQL中指定行的排序规则(字符集)。这里有一个关于在MySQL / PHP中执行所有步骤以确保一切都是正确的字符集的指南 - 我相信您可以使用其中一些信息来处理MSSQL - h2ooooooo
吹毛求疵一点,但“排序规则”不等同于字符集。 - troelskn
请澄清这个模糊但关键的句子:“当它直接来自SQL Server查询窗口时,它是正常工作的。” - Tim
4个回答

2

使用CHAR等效替代'æ'字面值,看看会发生什么。


2

我使用了一种解决方法,只是在插入表格之前对丹麦字符串进行了HTML编码,显示时再解码回来。


2

我不知道丹麦文字的情况,但我在SQL SERVER中遇到了亚美尼亚字母的问题。我解决了这个问题,方法如下。

insert into sometable(field) values( N'myArmenianText' );

1

仅仅是猜测:

我认为问题出在PHP部分,而不是MySQL部分(我看到你针对丹麦语使用了一些编码)。甚至更早之前。你有没有尝试在HTML页面上输入“ä”(真正的字符,而不是ä)?它会被转换成像你问题中的示例一样的其他字符。所以我在这里看到两种可能性:

  • 用户输入被错误地URl编码
  • PHP使用了一些不支持丹麦字符的编码。

或者可能是第3和第4种情况(不太可能):

  • 如果您重新发送一些字符到服务器,字符可能会不正确地到达客户端
  • 用户代理程序转换字符,因此向服务器发送损坏的字符(或显示错误,这意味着正确的字符在服务器上,但您无法使用浏览器查看它们)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接