如何使用PHPFreeTDS扩展从MSSQL服务器获取UTF-8字符集数据?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (53)

连接:

ini_set('mssql.charset', 'UTF-8');
$this->_resource = mssql_connect($config['servername'], $config['username'], $config['password']);

我尝试过创建~/.freetds.conf

[global]
client charset = UTF-8

我尝试将参数传递给php:

php -d mssql.charset="UTF-8" index.php

数据仍未在UTF-8中。

PHP-I

mssql

MSSQL Support => enabled
Active Persistent Links => 0
Active Links => 0
Library version => FreeTDS

Directive => Local Value => Master Value
mssql.allow_persistent => On => On
mssql.batchsize => 0 => 0
mssql.charset => no value => no value
mssql.compatability_mode => Off => Off
mssql.connect_timeout => 5 => 5
mssql.datetimeconvert => On => On
mssql.max_links => Unlimited => Unlimited
mssql.max_persistent => Unlimited => Unlimited

想法?

提问于
用户回答回答于

MSSQL实际上并不知道并支持UTF-8。

从数据库值转换为UTF-8:

mb_detect_encoding($value, mb_detect_order(), true) === 'UTF-8' ? $value : mb_convert_encoding($value, 'UTF-8');

从UTF-8转换为数据库值:

mb_convert_encoding($value, 'UCS-2LE', mb_detect_encoding($value, mb_detect_order(), true));

我使用的是Doctrine,所以我所要做的就是创建一个自定义StringType实现。

用户回答回答于

在我的例子中,问题在于FreeTDS本身的配置。在Linux上,文件是/etc/freetds/freetds.conf。

我不得不将版本更改为7.0(也许其他数字也有效,我刚刚尝试了7.0)。

[global]
    # TDS protocol version
    tds version = 7.0
ini_set('mssql.charset', 'UTF-8');

更改立即生效,以后不需要重新启动任何东西。

扫码关注云+社区

领取腾讯云代金券