【问题标题】:why doesn't ODBC support french accented words when inserting to sql server?为什么 ODBC 插入 sql server 时不支持法语重音词?
【发布时间】:2019-05-29 13:44:37
【问题描述】:

我正在使用 php 在带有 odbc 的 sql server 中插入一行,但我遇到了法语口音(é、â、ô、î、è、...)的问题,当我在 sql server 中插入时它可以工作并且php 也读得很好,但是当使用 odbc 插入时,它被读取为特殊字符

示例:

$sujet = 'BEM relevé bancaire';

$sql ="INSERT into matrice values('$groupe','$sujet','$nom','$ref','$ref','$next')";

odbc_exec($connection, $sql);

输出:

ID:542

群组:群组名称

CI: BEM relevé bancaire //THE PROBLEM

名称:姓名

做作参考:1

休息影响:1

下一个影响:0

How can I make it reads the french accents ?

不幸的是,可能的重复无法回答我的问题

【问题讨论】:

  • CI列的数据类型是什么?
  • 您直接将数据放入查询中。这不仅不安全,还可能造成您要解决的问题。考虑using ODBC prepared statements
  • @Zhorov varchar
  • @Machavity 我将代码编辑为准备好的语句,但这并没有解决我的问题。
  • 发布表的架构以及排序规则。另外,您是否确保所有内容都是 UTF8 格式? That's another common problem here

标签: php sql-server odbc


【解决方案1】:

我需要查看表的架构才能提供明确的答案。 char 和 varchar 的 SQL Server 数据类型不支持双字节字符集。确保您希望插入的表列具有 nchar 或 nvarchar 作为数据类型。

您可以使用一个包含多列的简单表格来测试它。将相同的值插入 A 列和 B 列,将返回不同的结果。

Create table test (A varchar(20), B nvarchar(20))
Insert into test (A,B) values ('â',N'â')

如果这不能解决问题,那么我认为客户端代码页与 sql server 代码页不同。您可以在此处阅读更多相关信息:You cannot correctly translate character data from a client to a server by using the SQL Server ODBC driver if the client code page differs from the server code page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多