Mau*_*ice 25 php database sql-server character-encoding
我试图通过PHP将一些数据存储在SQL Server数据库中.
问题是特殊字符未正确转换.我的app的charset是iso-8859-1,服务器使用的是windows-1252.
在插入之前手动转换数据没有帮助,似乎有一些转换正在进行.
运行SQL查询'set char_convert off'也无济于事.
任何人都知道如何让这个工作?
编辑:我试过ini_set('mssql.charset','windows-1252'); 同样,但也没有结果.
Man*_*acs 23
客户端字符集是必要的,但还不够:
ini_set('mssql.charset', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
我搜索了两天如何通过PHP将UTF-8数据(从Web表单)插入到MSSQL 2008中.我到处读到你不能,你需要先转换为UCS2(就像cypher的解决方案推荐的那样).在Windows上SQLSRV说是一个很好的解决方案,我无法尝试,因为我在Mac OSX上开发.
但是,FreeTDS手册(PHP mssql在OSX上使用的内容)说在开头引号前添加一个字母"N":
mssql_query("INSERT INTO table (nvarcharField) VALUES (N'?áú??á??????????')", +xon);
Run Code Online (Sandbox Code Playgroud)
根据此讨论,N字符告诉服务器转换为Unicode. https://softwareengineering.stackexchange.com/questions/155859/why-do-we-need-to-put-n-before-strings-in-microsoft-sql-server
小智 5
我有同样的问题,ini_set('mssql.charset', 'utf-8')并没有为我工作.但是,它以大写形式工作:
ini_set('mssql.charset', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
如果ini_set('mssql.charset', 'UTF-8');没有帮助,并且您没有 root 访问权限来修改系统范围的freetds.conf文件,您可以执行以下操作:
1.设置 /your/local/freetds.conf文件:
[sqlservername]
host=192.168.0.56
port=1433
tds version=7.0
client charset=UTF-8
Run Code Online (Sandbox Code Playgroud)
2.确保您的连接 DSN 使用的是服务器名,而不是 IP:
'dsn' => 'dblib:host=sqlservername;dbname=yourdb
Run Code Online (Sandbox Code Playgroud)
3.使 FreeTDS 以非特权用户身份使用本地 freetds.conf 文件,通过 env 变量从 php 脚本:
putenv('FREETDSCONF=/your/local/freetds.conf');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81628 次 |
| 最近记录: |