【问题标题】:MSSQL in Latin1, PHP in UTF-8Latin1 中的 MSSQL,UTF-8 中的 PHP
【发布时间】:2018-09-24 01:55:55
【问题描述】:

我们目前正在使用 codeigniter 制作一个 PHP 应用程序,我们可以访问 2 个数据库,一个 UTF-8(我们的 MySQL)和一个 Latin1(MSSQL 中的 SQL_Latin1_General_CP1_CI_AS),这个 latin1 数据库是只读的,我们无法控制它,所以我们无法更改它。

然后我们的问题是一些拉丁字符显示为黑色菱形。

我们已经将codeigniter上的数据库连接设置为:

'dbdriver' => 'mssql',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci'

而我们的 PHP 有以下编码:

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');

我们的文件也保存为 UTF8。

我们认为,因为 latin1 是 utf8 的子集,所以没有问题,但黑色菱形出现了。 找到的一种解决方案是在显示从 MSSQL 数据库获取的文本之前使用 utf8_encode,但它看起来像 XGH,必须有更好的方法。

所以基本上问题是如何从 Latin1 的数据库中选择和显示 UTF8(因为 php 是 UTF8)?

感谢您的宝贵时间

【问题讨论】:

    标签: sql-server codeigniter utf-8 iso-8859-1


    【解决方案1】:

    我认为COLLATE utf8_general_ci 子句对你有帮助,试试这个。

    使用示例

    SELECT column FROM test ORDER BY column COLLATE utf8_general_ci ASC

    参考此链接https://www.mssqltips.com/sqlservertip/4395/understanding-the-collate-databasedefault-clause-in-sql-server/

    【讨论】:

    • 不,它不起作用,utf8_general_ci 不为 MSSQL 所知。也许是我的数据库驱动程序?我检查了它的 mssql freetds。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2020-09-15
    • 2014-05-17
    • 2012-11-17
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多