从mysql中选择表时编码错误

时间:2013-10-10 19:37:05

标签: php mysql sql encoding utf-8

定义连接数据库的常量

define("DB_SERVER", "127.0.0.1");
define("DB_USER", "chutnej_app");
define("DB_PASS", "1234");
define("DB_NAME", "chutnej");

创建数据库连接

$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

这是mysql中的表

CREATE TABLE category (
    category_id INT NOT NULL AUTO_INCREMENT,
    category_name VARCHAR(255) UNIQUE,
    PRIMARY KEY (category_id)
    ) 
ENGINE = InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

使用一些数据填充表格:

INSERT INTO category (category_name) VALUES ('Reportáže'), ('Rozhovory'), ('Místa');

这个函数我打电话从表中选择上面的数据

function get_category() { 
    global $connection;
    $query = "SELECT * FROM category";
    $categories = mysqli_query($connection, $query);  
    confirm_query($categories);

    while($category = mysqli_fetch_array($categories)) {
      echo "<option value=\"{$category['category_id']}\">{$category['category_name']} </option>";
    }  
} 

结果:

<li>
  <label for="article_category">Druh článku:</label><br />
  <select name="article_category" id="article_category" type="text">
  <option value="3">M�sta</option><option value="1">Report��e</option><option value="2">Rozhovory</option> 
  </select>
</li>

这就是我在broswer中得到的,所有浏览器都这样做。 broswer中的编码设置为UTF-8。任何人都可以解释一下导致问题的原因吗? Atleast瞄准我正确的方向,这就够了:)我认为只要在CREATE TABLE语句中指定UTF8,我就能解决编码问题。

2 个答案:

答案 0 :(得分:1)

使用

mysqli_set_charset($connection, 'utf8');

也将数据库 connection 的字符集设置为UTF-8。 (见Docs

答案 1 :(得分:0)

执行

SET NAMES utf8

作为连接后的第一个查询。您可能需要重写当前表数据;

文档: