Mar*_*tis 19 php sql-server utf-8 freetds
我似乎无法使用FreeTDS扩展从MSSQL编码为UTF-8的数据.
连接:
ini_set('mssql.charset', 'UTF-8');
$this->_resource = mssql_connect($config['servername'], $config['username'], $config['password']);
Run Code Online (Sandbox Code Playgroud)
我无法使用任何其他扩展程序.
我试过创建〜/ .freetds.conf
[global]
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)
我已经尝试将参数传递给php:
php -d mssql.charset="UTF-8" index.php
Run Code Online (Sandbox Code Playgroud)
数据仍然不是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
Run Code Online (Sandbox Code Playgroud)
想法?
小智 30
我遇到了类似的问题并尝试了我在网上找到的所有设置 - 徒劳无功.
在我的情况下,问题是FreeTDS本身的配置.在Linux上,该文件是/etc/freetds/freetds.conf
我不得不将版本更改为7.0(也许其他数字也可以.我只试过7.0)
[global]
# TDS protocol version
tds version = 7.0
Run Code Online (Sandbox Code Playgroud)
在此之后,司机似乎接受了charset的变化.
ini_set('mssql.charset', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
顺便说一下:更改立即生效,之后无需重启
Lou*_*uer 16
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');
Run Code Online (Sandbox Code Playgroud)
从UTF-8转换为数据库值:
mb_convert_encoding($value, 'UCS-2LE', mb_detect_encoding($value, mb_detect_order(), true));
Run Code Online (Sandbox Code Playgroud)
幸运的是我使用的是Doctrine,所以我只需要创建一个自定义的StringType实现.
Moe*_*Far 15
如果您使用freeTDS,则应更改以下行/etc/freetds/freetds.conf:
[global]
# TDS protocol version
tds version = 4.2
Run Code Online (Sandbox Code Playgroud)
对此:
[global]
# TDS protocol version
tds version = 8.0
;tds version = 4.2
Run Code Online (Sandbox Code Playgroud)
最后添加这一行:
# set charset
client charset = UTF-8
Run Code Online (Sandbox Code Playgroud)
**clinet charset在全球[范围]
在您的查询中,您应该使用N字符.像这样:
$query = "INSERT INTO dbo.SMSOutbox (StationID, Dest, Text) VALUES ";
$query .= '(';
$query .= "'" . $this->stationId . "', ";
$query .= "'" . $this->destination . "', ";
$query .= "N'" . $this->text . "'";
$query .= ')';
Run Code Online (Sandbox Code Playgroud)
小智 13
您还可以通过在连接到DB之前在$ connectionInfo中添加CharacterSet UTF-8来解决此问题.
$serverName = "MyServer";
$connectionInfo = array( "Database"=>"AdventureWorks", "CharacterSet" => "UTF-8");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
Run Code Online (Sandbox Code Playgroud)
工作正常不需要额外的编码.
| 归档时间: |
|
| 查看次数: |
74380 次 |
| 最近记录: |