当我试图执行存储在文件中的sql语句时,遇到了一个问题。问题是,像纳奥这样的特殊字符被导入数据库时会变成胡言乱语。
我使用以下代码:
$dsn = 'mysql:host='.DBHOST.';dbname='.DBBASE;
$db = new PDO($dsn, DBUSER, DBPASS);
//$db->exec("set names 'utf8'");
$sql = "TRUNCATE TABLE wtm_meta_language";
$db->exec($sql);
$sql = file_get_contents('language.sql');
$db->exec($sql);language.sql文件是用UTF-8编码的,数据库也是如此。我试图通过在代码中添加"set name 'utf8'“来强制数据库连接使用utf-8 (第3行,即现在的注释),但是当我添加该行时,什么都不会被导入。
我希望有人有办法解决这个问题。
发布于 2014-10-15 06:59:04
您的结果没有被检索,因为您没有添加charset=utf8。
$db = new PDO('mysql:host='.DBHOST.';dbname='.DBBASE.';charset=utf8', 'username', 'password');然后它应该允许你得到所需的结果。
发布于 2014-10-15 06:43:37
可能是PHP没有检测到文件是UTF-8,因为根据您的评论,BOM丢失了。我找到了一个小函数这里,它应该强迫它读UTF-8。
function file_get_contents_utf8($fn) {
$opts = array(
'http' => array(
'method'=>"GET",
'header'=>"Content-Type: text/html; charset=utf-8"
)
);
$context = stream_context_create($opts);
$result = @file_get_contents($fn,false,$context);
return $result;
}此外,如果我是您,我将使用字符集来设置mysql连接上的字符集。另外,我会使用SHOW VARIABLES LIKE 'character_set%';,所以看看当前的连接字符集是什么。
https://stackoverflow.com/questions/26358603
复制相似问题