当我使用 phpMyAdmin 执行查询时,返回的任何错误都缺少错误描述。返回的错误只是:
#1064 -
... 而不是预期的:
#1064 - You have an error in your SQL syntax; check the manual...
我的 PHP 代码使用 mysql_error()
正确返回 MySQL 错误描述。
我花了 2 天时间在 Google 和 SO 上搜索解决方案的答案,但找不到。 因此,为了我自己和其他寻找此问题答案的人将来引用,我将在这里回答。如果您有更好的解决方案,请添加您的答案。
最佳答案
终于找到一个相关的问题PHPMyadmin does not show mysql error messages .我会声明我不明白如何用这个答案解决问题。我确实注意到@anomie 指出:
If mysql_error works, it seems more likely that the problem is in phpMyAdmin's character set conversion function
PMA_DBI_convert_message
in libraries/database_interface.lib.php
我在设置编码的 libraries/database_interface.lib.php 中找到了这个部分:
function PMA_DBI_convert_message($message)
{
// latin always last!
$encodings = array(
'japanese' => 'EUC-JP', //'ujis',
'japanese-sjis' => 'Shift-JIS', //'sjis',
'korean' => 'EUC-KR', //'euckr',
'russian' => 'KOI8-R', //'koi8r',
'ukrainian' => 'KOI8-U', //'koi8u',
'greek' => 'ISO-8859-7', //'greek',
'serbian' => 'CP1250', //'cp1250',
'estonian' => 'ISO-8859-13', //'latin7',
'slovak' => 'ISO-8859-2', //'latin2',
'czech' => 'ISO-8859-2', //'latin2',
'hungarian' => 'ISO-8859-2', //'latin2',
'polish' => 'ISO-8859-2', //'latin2',
'romanian' => 'ISO-8859-2', //'latin2',
'spanish' => 'CP1252', //'latin1',
'swedish' => 'CP1252', //'latin1',
'italian' => 'CP1252', //'latin1',
'norwegian-ny' => 'CP1252', //'latin1',
'norwegian' => 'CP1252', //'latin1',
'portuguese' => 'CP1252', //'latin1',
'danish' => 'CP1252', //'latin1',
'dutch' => 'CP1252', //'latin1',
'english' => 'CP1252', //'latin1',
'french' => 'CP1252', //'latin1',
'german' => 'CP1252', //'latin1',
);
我将英文行更改为 'english' => 'UTF-8',
现在可以正确显示完整的错误描述。
我不确定是否还有其他编码问题可能导致其他功能丢失文本,但这至少解决了我的问题。
关于phpMyAdmin 截断错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135618/