我需要在数据库中插入大量具有相应信息的国家/地区。这是有效的,但特殊字符作为Ã和é插入数据库中。如何使用特殊字符插入数据库中的国家/地区(最好使用下面的代码)?
以下是我用于此的代码。我使用多查询,因为我运行了多个查询(下面的代码只是一小部分)。举个例子,我把一些国家放在特殊字符上(真正的名单大约是250个国家)。
Insert_countries.php:
include 'mysql_connect.php';
// select database
mysqli_select_db( $mysqli, 'my_database' );
// check connection
if ( $mysqli->connect_errno > 0 ) {
trigger_error( 'Database connection failed: ' . $mysqli->connect_error, E_USER_ERROR );
}
// sql query
$sql = 'INSERT INTO countries (country_code_num, country_code_iso, country_en, country_nl, country_de, country_fr, country_continent, country_region, country_union) VALUES
("016", "AS", "American Samoa", "Amerikaans-Samoa", "Amerikanisch-Samoa", "Samoa américaine", "Oceania", "Polynesia", ""),
("020", "AD", "Andorra", "Andorra", "Andorra (Fürstentum)", "Andorre (Principauté)", "Europa", "Southern Europe ", ""),
("044", "BS", "Bahamas", "Bahama\'s", "Bahamas", "Bahamas", "Americas", "Caribbean", ""),
("894", "ZM", "Zambia", "Zambia", "Sambia", "Zambie", "Africa", "Eastern Africa", "");';
// Execute multi query
if ( $mysqli->multi_query( $sql ) ) {
do {
if ( $res = $mysqli->store_result() ) {
while ( $row = $res->fetch_row() ) {
printf( "%s\n", $row[0] );
}
$result->free();
}
if ( $mysqli->more_results() ) {
printf( "-----------------\n" );
}
}
while ( $mysqli->next_result() );
}
$mysqli->close();
修改
请求(一部分)create table语句以及create database。
// create database
$sql = "CREATE DATABASE IF NOT EXISTS my_database CHARACTER SET utf8 COLLATE utf8_general_ci";
// create table
$sql = "CREATE TABLE IF NOT EXISTS countries (
country_code_num INT(3) NOT NULL,
country_code_iso VARCHAR(3) NOT NULL,
country_en VARCHAR(75) NOT NULL,
country_nl VARCHAR(75) NOT NULL,
country_de VARCHAR(75) NOT NULL,
country_fr VARCHAR(75) NOT NULL,
country_continent VARCHAR(30) NOT NULL,
country_region VARCHAR(30) NOT NULL,
country_union VARCHAR(30) NOT NULL,
PRIMARY KEY ( country_code_num ));";
答案 0 :(得分:1)
评论中讨论的结果是,字符集没有正确设置。插入
$mysqli->set_charset('utf8');
解决了这个问题。这是为连接设置所需字符集的首选方法,我引用文档mysqli::set_charset
注意:
这是更改charset的首选方法。运用 不建议使用mysqli_query()来设置它(例如SET NAMES utf8)。
答案 1 :(得分:0)
确保在整个PHP和数据库交互中使用相同的字符集。必须检查一些事项:
SET NAMES 'utf8'
。CHARSET=utf8
。答案 2 :(得分:0)
感谢VMai和Gumbo,问题解决了。
解决方案是设置一个字符集。我使用国家/地区代码在我的sql($ sql)查询上方添加$mysqli->set_charset('utf8');
,现在它们已正确插入数据库中。谢谢!