一尘不染

使用PHP FreeTDS扩展从MSSQL服务器获取UTF-8字符集的数据

php

我似乎无法使用FreeTDS扩展名从MSSQL编码为UTF-8的数据中获取数据。

连接:

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-我

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

有想法吗?


阅读 273

收藏
2020-05-29

共1个答案

一尘不染

有时,MSSQL和UTF-8相当痛苦。我不得不手动将其转换。问题: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实现。

2020-05-29