翻译表列后无法获取数据

时间:2015-08-18 12:29:10

标签: php mysql phpmyadmin

我有一个简单查询的问题。假设我有表颜色(颜色,代码)

CREATE TABLE IF NOT EXISTS `colors` (
  `color` varchar(20) NOT NULL,
  `code` varchar(20) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

有数据:

INSERT INTO colors VALUES ('blue', 'Conventional'), ('green', 'Realistic');

当我做一个简单的选择查询时

SELECT * FROM colors WHERE code = 'Realistic';

我得到相应的行。

然后,我将代码列翻译成希腊语。所以我更新了 colors 表。

UPDATE colors set code = 'Συμβατικός' WHERE color = 'blue';
UPDATE colors set code = 'Ρεαλιστικός' WHERE color = 'green';

该表已成功更新。但是,如果我现在进行查询

SELECT * FROM colors WHERE code = 'Ρεαλιστικός';

我没有结果!

为什么会发生这种情况?有没有任何想法,因为我无法弄明白。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你已经进入了UTF-8奇怪而精彩的世界。

首先要知道的是:

将数据库排序规则设置为UTF-8还不够。

你需要注意一些事情。我敢打赌,你忘了或者不知道要记住的一些事情。试一试,看看是否有帮助。

  • 修改您的php.ini文件,使用UTF-8作为默认字符集:default_charset = "utf-8";
  • 将UTF-8设置为所有MySQL连接的默认字符集(是的,您的连接也使用字符集)
  • 在MySQL方面,可能需要修改my.ini文件,如下所示:

    [client]
    default-character-set=UTF-8
    
    [mysql]
    default-character-set=UTF-8
    
    [mysqld]
    character-set-client-handshake = false #force encoding to uft8
    character-set-server=UTF-8
    collation-server=UTF-8_general_ci
    
    [mysqld_safe]
    default-character-set=UTF-8
    

    在您进行了这些更改后重新启动MySQL。

  • 如果连接客户端无法指定与MySQL通信的编码,则在建立连接后,您可能必须运行以下命令/查询:set names UTF-8;